0.0.4 • Published 7 years ago

ams-core-entity v0.0.4

Weekly downloads
-
License
ISC
Repository
-
Last release
7 years ago

#AMS Core Entity

The module that defines how an entity is described and should behave.

##Schema

To create a model, you need to define a schema.

  var schema = new Schema({
    name:    String,
    binary:  Buffer,
    living:  Boolean,
    updated: { type: Date, default: Date.now },
    age:     { type: Number, min: 18, max: 65 },
    array:      [],
    ofString:   [String],
    ofNumber:   [Number],
    ofDates:    [Date],
    ofBoolean:  [Boolean],
    nested: {
      stuff: { type: String, lowercase: true, trim: true }
    }
  })

###Validation

If you want to validate you model, you need define how this Model should be configured.

Example:

  var vehicule = new Schema({
    name: {
      type: String,
      required: true,
    },
    tires: {
      type: Number,
      min: 1,
      max: 8
    },
    engineType: {
      type: String,
      enum: ['Electrical', 'Diesel', 'Gaz']
    },
    color: {
      type: String,
      regex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/
    }
  })

####Custom Validation

You can create custom validation for the

  var userSchema = new Schema({
    phone: {
      type: String,
      validate: {
        name: 'validatePhone',
        validator: function(v) {
          return /\d{3}-\d{3}-\d{4}/.test(v);
        },
      },
      required: true
    }
  });

####Custom Validation Async

  var userSchema = new Schema({
    phone: {
      type: String,
      validate: {
        name: 'validatePhone',
        validator: function(v, cb) {
          setTimeout(function() {
            cb(/\d{3}-\d{3}-\d{4}/.test(v));
          }, 5);
        },
      },
      required: [true, 'User phone number required']
    }
  });

####Schema

The relation between the Entities are done with the defineRelation method. It can take a 'hasMany' or a 'hasOne' relation. Nested object are object that belongs to the Entity.

Nested object that are not Entity should be defined directly in the schema. Something like { line1: '5th avenue', city: 'NYC' }.