UNPKG

blow-data

Version:
76 lines (65 loc) 1.44 kB
'use strict'; import {Query} from 'blow-query'; import {PersistedModel} from '../../src/PersistedModel'; import * as decorators from '../../src/decorators'; import {IBelongsToRelation} from '../../src/interfaces'; import {Author, Edition} from './interfaces'; @decorators.model({ name: 'Book', connection: 'default' }) export class Book extends PersistedModel { @decorators.property({ type: 'String', validations: { required: true } }) title: string; @decorators.property({ type: 'String', validations: { required: true, custom: uniqueValidator } }) no: string; @decorators.property({ type: 'Number', validations: { required: true, max: 5 } }) price: number; @decorators.property({ type: 'Boolean', hidden: true }) promo: boolean; @decorators.property({ type: 'Boolean', default: true }) available: boolean; @decorators.property({ type: 'Edition' }) edition: Edition; @decorators.relation({ type: 'belongsTo', model: 'Author', foreignKey: 'authorId' }) author: IBelongsToRelation<Author>; } function uniqueValidator(property) { const query = new Query(); query.equal(property.name, this[property.name]); return Book.count(query.toJSON().where).map(c => { if(c === 0) { return; } return `"${property.name}" does not have unique value`; }); }