From d5e5419dfc14bbb8a1329c2028134b0999883258 Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 3 Mar 2017 02:42:17 +0900 Subject: [PATCH] wip --- src/api/endpoints/posts/context.ts | 27 +++------- src/api/it.ts | 83 ++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 20 deletions(-) diff --git a/src/api/endpoints/posts/context.ts b/src/api/endpoints/posts/context.ts index 673da0fab..25ac687d3 100644 --- a/src/api/endpoints/posts/context.ts +++ b/src/api/endpoints/posts/context.ts @@ -3,7 +3,7 @@ /** * Module dependencies */ -import validate from '../../validator'; +import it from '../../it'; import Post from '../../models/post'; import serialize from '../../serializers/post'; @@ -18,37 +18,24 @@ module.exports = (params, user) => new Promise(async (res, rej) => { // Get 'post_id' parameter - const [postId, postIdErr] = validate(params.post_id, 'id', true); + const [postId, postIdErr] = it(params.post_id, 'id', true); if (postIdErr) return rej('invalid post_id'); // Get 'limit' parameter - let [limit, limitErr] = validate(params.limit, 'number'); + const [limit, limitErr] = it(params.limit).expect.number().range(1, 100).default(10).qed(); 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; - } + const [offset, offsetErr] = it(params.limit).expect.number().min(0).default(0).qed(); + if (offsetErr) return rej('invalid offset'); // Lookup post const post = await Post.findOne({ - _id: new mongo.ObjectID(postId) + _id: postId }); if (post === null) { - return rej('post not found', 'POST_NOT_FOUND'); + return rej('post not found'); } const context = []; diff --git a/src/api/it.ts b/src/api/it.ts index 6e8aefdf2..ec4254748 100644 --- a/src/api/it.ts +++ b/src/api/it.ts @@ -1,3 +1,8 @@ +/** + * it + * 楽しいバリデーション + */ + import * as mongo from 'mongodb'; import hasDuplicates from '../common/has-duplicates'; @@ -11,6 +16,8 @@ interface Factory { required: () => Factory; + default: (value: any) => Factory; + validate: (validator: Validator) => Factory; } @@ -33,6 +40,16 @@ class FactoryCore implements Factory { return this; } + /** + * このインスタンスの値が設定されていないときにデフォルトで設定する値を設定します + */ + default(value: any) { + if (this.value === null) { + this.value = value; + } + return this; + } + /** * このインスタンスの値およびエラーを取得します */ @@ -79,6 +96,13 @@ class BooleanFactory extends FactoryCore { return super.required(); } + /** + * このインスタンスの値が設定されていないときにデフォルトで設定する値を設定します + */ + default(value: boolean) { + return super.default(value); + } + /** * このインスタンスの値およびエラーを取得します */ @@ -124,6 +148,30 @@ class NumberFactory extends FactoryCore { return this; } + /** + * このインスタンスの値が指定された下限より下回っている場合エラーにします + * @param value 下限 + */ + min(value: number) { + if (this.error || this.value === null) return this; + if (this.value < value) { + this.error = new Error('invalid-range'); + } + return this; + } + + /** + * このインスタンスの値が指定された上限より上回っている場合エラーにします + * @param value 上限 + */ + max(value: number) { + if (this.error || this.value === null) return this; + if (this.value > value) { + this.error = new Error('invalid-range'); + } + return this; + } + /** * このインスタンスの値が undefined または null の場合エラーにします */ @@ -131,6 +179,13 @@ class NumberFactory extends FactoryCore { return super.required(); } + /** + * このインスタンスの値が設定されていないときにデフォルトで設定する値を設定します + */ + default(value: number) { + return super.default(value); + } + /** * このインスタンスの値およびエラーを取得します */ @@ -189,6 +244,13 @@ class StringFactory extends FactoryCore { return super.required(); } + /** + * このインスタンスの値が設定されていないときにデフォルトで設定する値を設定します + */ + default(value: string) { + return super.default(value); + } + /** * このインスタンスの値およびエラーを取得します */ @@ -252,6 +314,13 @@ class ArrayFactory extends FactoryCore { return super.required(); } + /** + * このインスタンスの値が設定されていないときにデフォルトで設定する値を設定します + */ + default(value: any[]) { + return super.default(value); + } + /** * このインスタンスの値およびエラーを取得します */ @@ -291,6 +360,13 @@ class IdFactory extends FactoryCore { return super.required(); } + /** + * このインスタンスの値が設定されていないときにデフォルトで設定する値を設定します + */ + default(value: mongo.ObjectID) { + return super.default(value); + } + /** * このインスタンスの値およびエラーを取得します */ @@ -330,6 +406,13 @@ class ObjectFactory extends FactoryCore { return super.required(); } + /** + * このインスタンスの値が設定されていないときにデフォルトで設定する値を設定します + */ + default(value: any) { + return super.default(value); + } + /** * このインスタンスの値およびエラーを取得します */