なんかもうめっちゃ変えた

This commit is contained in:
syuilo
2018-03-09 18:11:10 +09:00
parent caea9c91b9
commit 910ccf1804
7 changed files with 425 additions and 307 deletions

View File

@@ -6,6 +6,23 @@ module.exports = (params, user) => new Promise(async (res, rej) => {
const [my = false, myErr] = $(params.my).optional.boolean().$;
if (myErr) return rej('invalid my param');
// Get 'limit' parameter
const [limit = 10, limitErr] = $(params.limit).optional.number().range(1, 100).$;
if (limitErr) return rej('invalid limit param');
// Get 'since_id' parameter
const [sinceId, sinceIdErr] = $(params.since_id).optional.id().$;
if (sinceIdErr) return rej('invalid since_id param');
// Get 'until_id' parameter
const [untilId, untilIdErr] = $(params.until_id).optional.id().$;
if (untilIdErr) return rej('invalid until_id param');
// Check if both of since_id and until_id is specified
if (sinceId && untilId) {
return rej('cannot set since_id and until_id');
}
const q = my ? {
is_started: true,
$or: [{
@@ -17,13 +34,29 @@ module.exports = (params, user) => new Promise(async (res, rej) => {
is_started: true
};
const sort = {
_id: -1
};
if (sinceId) {
sort._id = 1;
q._id = {
$gt: sinceId
};
} else if (untilId) {
q._id = {
$lt: untilId
};
}
// Fetch games
const games = await Game.find(q, {
sort: {
_id: -1
}
sort
});
// Reponse
res(Promise.all(games.map(async (g) => await pack(g, user))));
res(Promise.all(games.map(async (g) => await pack(g, user, {
detail: false
}))));
});

View File

@@ -38,7 +38,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => {
is_ended: false,
logs: [],
settings: {
map: eighteight,
map: eighteight.data,
bw: 'random',
is_llotheo: false
}

View File

@@ -28,7 +28,7 @@ export interface IGame {
winner_id: mongo.ObjectID;
logs: any[];
settings: {
map: Map;
map: string[];
bw: string | number;
is_llotheo: boolean;
};
@@ -39,8 +39,15 @@ export interface IGame {
*/
export const pack = (
game: any,
me?: string | mongo.ObjectID | IUser
me?: string | mongo.ObjectID | IUser,
options?: {
detail?: boolean
}
) => new Promise<any>(async (resolve, reject) => {
const opts = Object.assign({
detail: true
}, options);
let _game: any;
// Populate the game if 'game' is ID
@@ -69,6 +76,11 @@ export const pack = (
_game.id = _game._id;
delete _game._id;
if (opts.detail === false) {
delete _game.logs;
delete _game.settings.map;
}
// Populate user
_game.user1 = await packUser(_game.user1_id, meId);
_game.user2 = await packUser(_game.user2_id, meId);