diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-08-04 22:28:01 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-08-04 22:28:01 +0900 |
| commit | be9f6ad29433b1403850397c6b24e63d0a15619a (patch) | |
| tree | 5fca43c89f63ad30ba8b58116a356c93caed4e98 /src/server/api/endpoints | |
| parent | 5.13.2 (diff) | |
| download | sharkey-be9f6ad29433b1403850397c6b24e63d0a15619a.tar.gz sharkey-be9f6ad29433b1403850397c6b24e63d0a15619a.tar.bz2 sharkey-be9f6ad29433b1403850397c6b24e63d0a15619a.zip | |
Implement surrender of reversi
Diffstat (limited to 'src/server/api/endpoints')
| -rw-r--r-- | src/server/api/endpoints/games/reversi/games/surrender.ts | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/server/api/endpoints/games/reversi/games/surrender.ts b/src/server/api/endpoints/games/reversi/games/surrender.ts new file mode 100644 index 0000000000..dc9908aef1 --- /dev/null +++ b/src/server/api/endpoints/games/reversi/games/surrender.ts @@ -0,0 +1,59 @@ +import $ from 'cafy'; import ID from '../../../../../../misc/cafy-id'; +import ReversiGame, { pack } from '../../../../../../models/games/reversi/game'; +import { ILocalUser } from '../../../../../../models/user'; +import getParams from '../../../../get-params'; +import { publishReversiGameStream } from '../../../../../../stream'; + +export const meta = { + desc: { + ja: '指定したリバーシの対局で投了します。' + }, + + requireCredential: true, + + params: { + gameId: $.type(ID).optional.note({ + desc: { + ja: '投了したい対局' + } + }) + } +}; + +export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => { + const [ps, psErr] = getParams(meta, params); + if (psErr) return rej(psErr); + + const game = await ReversiGame.findOne({ _id: ps.gameId }); + + if (game == null) { + return rej('game not found'); + } + + if (game.isEnded) { + return rej('this game is already ended'); + } + + if (!game.user1Id.equals(user._id) && !game.user2Id.equals(user._id)) { + return rej('access denied'); + } + + const winnerId = game.user1Id.equals(user._id) ? game.user2Id : game.user1Id; + + await ReversiGame.update({ + _id: game._id + }, { + $set: { + surrendered: user._id, + isEnded: true, + winnerId: winnerId + } + }); + + publishReversiGameStream(game._id, 'ended', { + winnerId: winnerId, + game: await pack(game._id, user) + }); + + res(); +}); |