Changeset View
Changeset View
Standalone View
Standalone View
lib/app/base-chips/field-types/int.js
"use strict"; | |||||
const locreq = require("locreq")(__dirname); | const locreq = require("locreq")(__dirname); | ||||
const Errors = locreq("lib/response/error.js"); | const Errors = locreq("lib/response/error.js"); | ||||
const human_comparators_to_query = { | const human_comparators_to_query = { | ||||
">": "$gt", | ">": "$gt", | ||||
gt: "$gt", | gt: "$gt", | ||||
gte: "$gte", | gte: "$gte", | ||||
">=": "$gte", | ">=": "$gte", | ||||
"=>": "$gte", | "=>": "$gte", | ||||
"<": "$lt", | "<": "$lt", | ||||
lt: "$lt", | lt: "$lt", | ||||
lte: "$lte", | lte: "$lte", | ||||
"<=": "$lte", | "<=": "$lte", | ||||
"=<": "$lte", | "=<": "$lte", | ||||
"=": "$eq", | "=": "$eq", | ||||
}; | }; | ||||
const proper_value_checkers = [ | const proper_value_checkers = [ | ||||
(params, value) => { | (params, value) => { | ||||
if (Number.isFinite(params.min) && value < params.min) | if (Number.isFinite(params.min) && value < params.min) | ||||
return [ | return [ | ||||
false, | false, | ||||
`Value should be larger or equal to '${params.min}.`, | `Value should be larger or equal to '${params.min}.`, | ||||
]; | ]; | ||||
else return [true]; | return [true]; | ||||
}, | }, | ||||
(params, value) => { | (params, value) => { | ||||
if (Number.isFinite(params.max) && value > params.max) | if (Number.isFinite(params.max) && value > params.max) | ||||
return [ | return [ | ||||
false, | false, | ||||
`Value should be smaller or equal to '${params.max}.`, | `Value should be smaller or equal to '${params.max}.`, | ||||
]; | ]; | ||||
else return [true]; | return [true]; | ||||
}, | }, | ||||
]; | ]; | ||||
const int = { | const int = { | ||||
name: "int", | name: "int", | ||||
get_description: function() { | get_description() { | ||||
return "An integer number."; | return "An integer number."; | ||||
}, | }, | ||||
is_proper_value: function(context, params, new_value) { | is_proper_value(context, params, new_value) { | ||||
if (!Number.isInteger(new_value)) { | if (!Number.isInteger(new_value)) { | ||||
return Promise.reject( | return Promise.reject( | ||||
`Value '${new_value}' is not a int number format.` | `Value '${new_value}' is not a int number format.` | ||||
); | ); | ||||
} | } | ||||
const failed_checks = proper_value_checkers | const failed_checks = proper_value_checkers | ||||
.map(fn => fn(params, new_value)) | .map(fn => fn(params, new_value)) | ||||
.filter(element => !element[0]); | .filter(element => !element[0]); | ||||
if (failed_checks.length === 0) { | if (!failed_checks.length) { | ||||
return Promise.resolve(); | return Promise.resolve(); | ||||
} else { | |||||
return Promise.reject(failed_checks.map(e => e[1]).join(" ")); | |||||
} | } | ||||
return Promise.reject(failed_checks.map(e => e[1]).join(" ")); | |||||
}, | }, | ||||
encode: function(context, params, value_in_code) { | encode(context, params, value_in_code) { | ||||
return parseInt(value_in_code, 10); | return parseInt(value_in_code, 10); | ||||
}, | }, | ||||
filter_to_query: function(context, params, field_filter) { | filter_to_query(context, params, field_filter) { | ||||
if (typeof field_filter !== "object") { | if (typeof field_filter !== "object") { | ||||
return { | return { | ||||
$eq: parseInt(field_filter), | $eq: parseInt(field_filter, 10), | ||||
}; | }; | ||||
} | } | ||||
// treating filter as a query here | // treating filter as a query here | ||||
const new_filter = {}; | const new_filter = {}; | ||||
for (const comparator in field_filter) { | for (const comparator in field_filter) { | ||||
const new_comparator = human_comparators_to_query[comparator]; | const new_comparator = human_comparators_to_query[comparator]; | ||||
if (new_comparator === undefined) { | if (new_comparator === undefined) { | ||||
throw new Errors.ValidationError( | throw new Errors.ValidationError( | ||||
`Unknown comparator: '${comparator}'.` | `Unknown comparator: '${comparator}'.` | ||||
); | ); | ||||
} | } | ||||
new_filter[new_comparator] = parseInt(field_filter[comparator]); | new_filter[new_comparator] = parseInt(field_filter[comparator], 10); | ||||
} | } | ||||
return new_filter; | return new_filter; | ||||
}, | }, | ||||
}; | }; | ||||
module.exports = int; | module.exports = int; |