@avonjs/avonjs
Version:
A fluent Node.js API generator.
76 lines (75 loc) • 2.05 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const joi_1 = __importDefault(require("joi"));
const Field_1 = __importDefault(require("./Field"));
const NumberFilter_1 = __importDefault(require("./Filters/NumberFilter"));
class Decimal extends Field_1.default {
/**
* The callback to be used for the field's default value.
*/
defaultCallback = () => {
return this.isNullable() ? this.nullValue() : 0;
};
/**
* The validation rules callback for creation and updates.
*/
rulesSchema = joi_1.default.number().precision(2);
/**
* The validation rules callback for creation.
*/
creationRulesSchema = joi_1.default.number().precision(2);
/**
* The validation rules callback for updates.
*/
updateRulesSchema = joi_1.default.number().precision(2);
/**
* The maximum number of decimal places allowed.
*/
decimal = 2;
/**
* Mutate the field value for response.
*/
getMutatedValue(request, value) {
return Number(Number.parseFloat(value).toFixed(this.decimal));
}
/**
* Specifies the maximum number of decimal places.
*/
precision(decimal) {
this.decimal = decimal;
this.rules(joi_1.default.number().precision(decimal));
return this;
}
/**
* Determine field is filterable or not.
*/
isFilterable() {
return true;
}
/**
* Determine field is orderable or not.
*/
isOrderable() {
return true;
}
/**
* Make the field filter.
*/
makeFilter(request) {
return new NumberFilter_1.default(this);
}
/**
* Get the swagger-ui schema.
*/
baseSchema(request) {
return {
...super.baseSchema(request),
type: 'number',
format: 'float',
};
}
}
exports.default = Decimal;