Class: EntityDefinition

EntityDefinition(name)

Définition d'une entité, avec les méthodes pour la définir
mais aussi récupérer sa collection, une EntityQuery, etc.

Constructor

new EntityDefinition(name)

Construction d'une définition d'entité. Passez par la méthode Component#entity pour créer une entité.

Parameters:
Name Type Description
name String

le nom de l'entité

Source:

Methods

_initializeIndexes(cb)

Init des indexes

  • virent ceux qu'on avait mis et qui ont disparu de l'entity
  • ajoute ceux qui manquent
Parameters:
Name Type Description
cb indexesCallback

rappelée avec (error, createdIndexes), le 2e argument est undefined si on a rien créé

Source:

_initializeTextSearchFieldsIndex(callback)

Initialise l'index text (qui doit être unique)

Parameters:
Name Type Description
callback
Source:
See:

afterStore(fn)

Ajoute un traitement après stockage.

Parameters:
Name Type Description
fn simpleCallback

fonction à exécuter qui doit avoir une callback en paramètre (qui n'aura pas d'arguments)

Source:

beforeDelete(fn)

Ajoute un traitement avant suppression

Parameters:
Name Type Description
fn simpleCallback

fonction à exécuter qui doit avoir une callback en paramètre (qui n'aura pas d'arguments)

Source:

beforeStore(beforeStoreCallback)

Ajoute une fonction à appliquer avant store

Parameters:
Name Type Description
beforeStoreCallback entityContextCallback
Source:

construct(fn)

Ajoute un constructeur (appelé par create avec l'objet qu'on lui donne), s'il n'existe pas
le create affectera à l'entité toutes les valeurs qu'on lui passe

Parameters:
Name Type Description
fn function

Constructeur

Source:

count(cb)

Passe à cb le nb d'entity (hors softDeleted, passer par EntityQuery#count si on les veut)

Parameters:
Name Type Description
cb EntityQuery~CountCallback
Source:

countBy(index, cb)

Compte le nb d'entité pour chaque valeur de l'index demandé

Parameters:
Name Type Description
index string
cb EntityQuery~CountByCallback
Source:

create(valuesopt) → {Entity}

Retourne une instance Entity à partir de la définition
(appelera defaults s'il existe, puis construct s'il existe et Object.assign sinon)
Attention, si la fonction passée à construct n'attend pas d'argument,
toutes les propriétés de values seront affectée à l'entité !

Parameters:
Name Type Attributes Description
values Object <optional>

Des valeurs à injecter dans l'objet.

Source:
To Do:
  • virer ce comportement et ajouter dans les constructeurs qui l'utilisaient un `Object.assign(this, values)`
Returns:

Une instance de l'entité

Type
Entity

defaults(fn)

Ajoute un initialisateur, qui sera toujours appelé par create (avant un éventuel construct)

Parameters:
Name Type Description
fn function

La fonction qui initialisera des valeurs par défaut (sera appelée sans arguments)

Source:

defineIndex(indexName, fieldTypeopt, indexOptionsopt, callbackopt) → {EntityDefinition}

Ajoute un indexe à l'entité. Contrairement à la logique SGBD, on ne type pas
l'indexe. En réalité il faut comprendre un index comme "Utilise la valeur du
champ XXX et indexe-la".

Une callback peut être fournie pour fabriquer des valeurs virtuelles. Par exemple :

 entity.index('age', 'integer', function() {
   return (new Date()).getFullYear() - this.born.getFullYear();
 });
Parameters:
Name Type Attributes Description
indexName String

Nom du champ à indexer (ou de l'index virtuel si on passe une callback)

fieldType String <optional>

Type du champ à indexer ('integer', 'string', 'date')
ce qui va entrainer du cast à l'indexation et à la query (cf. castToType)

indexOptions Object <optional>

Options d'index mongo ex: {unique: true, sparse: true}

Properties
Name Type Attributes Default Description
sparse boolean <optional>
false

si true l'index n'est pas sauvegardé

unique boolean <optional>
false

si true le store plantera si la valeur existe déjà en base

normalizer function <optional>

une fonction à appliquer sur la valeur de l'index avant stockage
(mais après callback éventuelle)

callback function <optional>

Pour définir la valeur de l'index, appelé avec un .call(entity).
L'index est alors "virtuel" car il ne dépend pas d'un seul champ,
mieux vaut ne pas lui donner le même nom qu'un champ
si on fait trop de transformations

Source:
Returns:

pour chaînage

Type
EntityDefinition

defineMethod(name, fn)

Ajoute une méthode au prototype du constructeur d'entity

Parameters:
Name Type Description
name string

Nom de la méthode

fn function

Méthode

Source:

defineTextSearchFields(fields)

Défini les index de recherche fullText

Parameters:
Name Type Description
fields Array.<string> | Array.<Array>

la liste des champs à prendre en compte pour la recherche fulltext, passer un tableau [name, weight] pour fixer un poid ≠ 1 sur le champ concerné

Source:

flush(cb)

drop la collection

Parameters:
Name Type Description
cb simpleCallback
Source:

getCollection() → {Collection}

Retourne l'objet Collection de mongo de cette EntityDefinition

Source:
Returns:
Type
Collection

getDb() → {Db}

Retourne l'objet db de la connexion à Mongo
À n'utiliser que dans des cas très particuliers pour utiliser directement des commandes du driver mongo
Si lassi ne propose pas la méthode pour votre besoin, il vaudrait mieux l'ajouter à lassi
plutôt que d'utiliser directement cet objet, on vous le donne à vos risques et périls…

Source:
Returns:
Type
Db

getIndex(indexName) → {indexDefinition}

Retourne la définition de l'index demandé

Parameters:
Name Type Description
indexName string
Source:
Throws:

si index n'est pas un index défini

Type
Error
Returns:
Type
indexDefinition

getMongoIndexes(cb)

Récupère tous les index existants

Parameters:
Name Type Description
cb indexesCallback
Source:

getMongoIndexName(indexName) → {string}

Retourne le nom de l'index mongo associé à un champ

Parameters:
Name Type Description
indexName
Source:
Returns:
Type
string

hasIndex(indexName) → {boolean}

Pour savoir si un index est défini

Parameters:
Name Type Description
indexName
Source:
Returns:
Type
boolean

match(indexopt) → {EntityQuery}

Retourne un requeteur (sur lequel on pourra chaîner les méthodes de EntityQuery)

Parameters:
Name Type Attributes Description
index string <optional>

Un index à matcher en premier, on peut en mettre plusieurs

Source:
Returns:
Type
EntityQuery

onDuplicate(fn)

Ajoute une fct pour traiter un plantage pour cause de doublon au store

Parameters:
Name Type Description
fn duplicateCallback
Source:

onLoad(fn)

Ajoute un traitement après récupération de l'entité en base de donnée

ATTENTION: cette fonction sera appelée très souvent (pour chaque entity retournée) et doit se limiter
à des traitements très simples.
Contrairent aux autres before* ou after*, elle ne prend pas de callback pour le moment car dangereux
en terme de performance - on ne veut pas d'appel asynchrone sur ce genre de fonction - et plus compliqué
à implémenter ici.
Par exemple, sur une entité utilisateur:

       this.onLoad(function {
           this.$dbPassword = this.password // permettra de voir plus tard si le password a été changé
       })
Parameters:
Name Type Description
fn simpleCallback

fonction à exécuter qui ne prend pas de paramètre

Source:

setSkipValidation(skipValidation)

Permet de désactiver / réactiver la validation au beforeStore

Parameters:
Name Type Description
skipValidation boolean

si true, on ne vérifiera pas la validation avant le store

Source:

trackAttribute(attributeName)

Marque l'attribut comme étant à suivre, pour voir le changement entre le chargement depuis la base et le store

Parameters:
Name Type Description
attributeName string
Source:

trackAttributes(attributeName)

Marque les attributs comme étant à suivre, pour voir le changement entre le chargement depuis la base et le store

Parameters:
Name Type Description
attributeName Array.<string>
Source:

validate(validateFn)

Ajoute une fonction de validation

Parameters:
Name Type Description
validateFn function
Source:

validateJsonSchema(schema, addKeywords)

Définit un json schema pour l'entity, validé lors d'un appel à isValid() ou avant le store d'une entity
Le deuxième argument permet d'ajouter des keywords personnalisés

Parameters:
Name Type Description
schema Object

json schema à valider

addKeywords Object

"keywords" supplémentaires à définir sur ajv, @link {https://github.com/epoberezkin/ajv#api-addkeyword}

Source:

validateOnChange(attributeName, validateFn)

Ajoute une fonction de validation sur un attribut particulier et ajoute un trackAttribute dessus.
(donc inutile de faire ce trackAttribute par ailleurs)

Parameters:
Name Type Description
attributeName string | Array.<string>

(on peut en passer plusieurs, ils auront tous la même fct de validation)

validateFn function
Source: