From f3d5c07ada08a089969176cdb7b7bfc3f0132fda Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 2 Mar 2017 17:08:09 +0900 Subject: wip --- src/api/endpoints/posts/context.js | 83 -------------------------------------- src/api/endpoints/posts/context.ts | 81 +++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 83 deletions(-) delete mode 100644 src/api/endpoints/posts/context.js create mode 100644 src/api/endpoints/posts/context.ts (limited to 'src/api') diff --git a/src/api/endpoints/posts/context.js b/src/api/endpoints/posts/context.js deleted file mode 100644 index b843044642..0000000000 --- a/src/api/endpoints/posts/context.js +++ /dev/null @@ -1,83 +0,0 @@ -'use strict'; - -/** - * Module dependencies - */ -import * as mongo from 'mongodb'; -import Post from '../../models/post'; -import serialize from '../../serializers/post'; - -/** - * Show a context of a post - * - * @param {any} params - * @param {any} user - * @return {Promise} - */ -module.exports = (params, user) => - new Promise(async (res, rej) => -{ - // Get 'post_id' parameter - const postId = params.post_id; - if (postId === undefined || postId === null) { - return rej('post_id is required'); - } - - // Get 'limit' parameter - let limit = params.limit; - if (limit !== undefined && limit !== null) { - limit = parseInt(limit, 10); - - // From 1 to 100 - if (!(1 <= limit && limit <= 100)) { - return rej('invalid limit range'); - } - } else { - limit = 10; - } - - // Get 'offset' parameter - let offset = params.offset; - if (offset !== undefined && offset !== null) { - offset = parseInt(offset, 10); - } else { - offset = 0; - } - - // Lookup post - const post = await Post.findOne({ - _id: new mongo.ObjectID(postId) - }); - - if (post === null) { - return rej('post not found', 'POST_NOT_FOUND'); - } - - const context = []; - let i = 0; - - async function get(id) { - i++; - const p = await Post.findOne({ _id: id }); - - if (i > offset) { - context.push(p); - } - - if (context.length == limit) { - return; - } - - if (p.reply_to_id) { - await get(p.reply_to_id); - } - } - - if (post.reply_to_id) { - await get(post.reply_to_id); - } - - // Serialize - res(await Promise.all(context.map(async post => - await serialize(post, user)))); -}); diff --git a/src/api/endpoints/posts/context.ts b/src/api/endpoints/posts/context.ts new file mode 100644 index 0000000000..673da0fab8 --- /dev/null +++ b/src/api/endpoints/posts/context.ts @@ -0,0 +1,81 @@ +'use strict'; + +/** + * Module dependencies + */ +import validate from '../../validator'; +import Post from '../../models/post'; +import serialize from '../../serializers/post'; + +/** + * Show a context of a post + * + * @param {any} params + * @param {any} user + * @return {Promise} + */ +module.exports = (params, user) => + new Promise(async (res, rej) => +{ + // Get 'post_id' parameter + const [postId, postIdErr] = validate(params.post_id, 'id', true); + if (postIdErr) return rej('invalid post_id'); + + // Get 'limit' parameter + let [limit, limitErr] = validate(params.limit, 'number'); + if (limitErr) return rej('invalid limit'); + + if (limit !== null) { + // From 1 to 100 + if (!(1 <= limit && limit <= 100)) { + return rej('invalid limit range'); + } + } else { + limit = 10; + } + + // Get 'offset' parameter + let offset = params.offset; + if (offset !== undefined && offset !== null) { + offset = parseInt(offset, 10); + } else { + offset = 0; + } + + // Lookup post + const post = await Post.findOne({ + _id: new mongo.ObjectID(postId) + }); + + if (post === null) { + return rej('post not found', 'POST_NOT_FOUND'); + } + + const context = []; + let i = 0; + + async function get(id) { + i++; + const p = await Post.findOne({ _id: id }); + + if (i > offset) { + context.push(p); + } + + if (context.length == limit) { + return; + } + + if (p.reply_to_id) { + await get(p.reply_to_id); + } + } + + if (post.reply_to_id) { + await get(post.reply_to_id); + } + + // Serialize + res(await Promise.all(context.map(async post => + await serialize(post, user)))); +}); -- cgit v1.2.3-freya