import Validator from 'sosise-core/build/Validator/Validator'; import ValidationException from 'sosise-core/build/Exceptions/Validation/ValidationException'; enum ItemType { AVAILABLE = 'available', NOT_AVAILABLE = 'not-available', } /** * For more information, refer to: https://sosise.github.io/sosise-docs/#/documentation/unifiers */ export default class %name% { private params: any; public age: number; public confirmation: 'yes' | 'no'; public items: { id: number; title: string | null; availability?: ItemType }[] = []; /** * Constructor */ constructor(params: any) { // Remember incoming params this.params = params; // Validate, await is important otherwise we could not catch the exception this.validate(); // Map data this.map(); } /** * Request data validation */ private validate() { // Create validator const validator = new Validator(this.params); // Validate validator .field('age') .required() .shouldBeNumber() .min(18); validator .field('confirmation') .required() .inList(['yes', 'no']); validator .field('items') .required() .shouldBeArray() .min(1) .validateArrayOfObjects(childValidator => { childValidator .field('id') .required() .shouldBeNumber(); childValidator .field('title') .required() .shouldBeString(); childValidator .field('availability') .sometimes() .enum(ItemType); }); // If validation fails, throw an exception if (validator.fails()) { throw new ValidationException('Validation exception', validator.errors); } } /** * Request data mapping */ private map() { this.age = this.params.age; this.confirmation = this.params.confirmation; this.items = this.params.items; } }