sgm

Sigma ORM

Estructura de la Aplicacion

APP_NAME/
|   models/
|   |   personas.js
|   controls/
|   |   personas.js
|   routes/
|   |   personas.js
|   tests/
|   |   personas.js
|   node_modules/
|   app.js

Comandos del a APP

|   sgm new APP_NAME    crea la estructura de la app en la carpeta APP_NAME, si no existe la crea, si existe la usa como base
|   sgm generate NAME   crea un Model, Controller, Routes y Test con el nombre NAME dentro de las carpetas correspondiente. si existe te PUTEA
|   sgm start           Inicia la APP en modo desarrollo (Como app)
|   sgm start -t        Corre los Tests de la APP
|   sgm start -p        Inicia la APP en modo Produccion (Como un Servicio)
|   sgm stop            Detiene la APP en modo Produccion

Estructura del Controller

{
    'findAll':                  Adapter.FindAll
,   'findOne':                  Adapter.FindOne
,   'count':                    Adapter.Count
,   'describe':                 Adapter.Describe
,   'update':                   Adapter.Update
,   'create':                   Adapter.Create
,   'filter':                   Adapter.FindAll
,   'find':                     Adapter.FindOne
,   'delete':                   Adapter.Delete
,   'resolveAssoc':             Adapter.FindAll | Adapter.FindOne (Depende del Assoc)
,   'countAssoc':               Adapter.Count
,   'describeAssoc':            Adapter.Describe
,   'filterAssoc':              Adapter.Filter (Solo ocurre si el assoc es has-many, has-many:through o has-and-belongs-to-many)
,   'createAssoc':              Adapter.Create
,   'deleteAssoc':              Adapter.Delete
}

Estructura Routes

{
//  Rutas del Modelo                        Accion en el Control del Modelo
    'GET    /personas':                     'findAll'
,   'GET    /personas/:id':                 'findOne'
,   'GET    /personas/count':               'count'
,   'GET    /personas/describe':            'describe'
,   'PUT    /personas/:id':                 'update'
,   'PUT    /personas':                     'create'
,   'POST   /personas/filter':              'filter'
,   'POST   /personas/find':                'find'
,   'DELETE /personas/:id':                 'delete'

//  Rutas de sus Assocs (Si tiene)          Accion en el Control del Modelo
,   'GET    /personas/:id/:assoc':          'resolveAssoc'
,   'GET    /personas/:id/:assoc/count':    'countAssoc'
,   'GET    /personas/:id/:assoc/describe': 'describeAssoc'
,   'POST   /personas/:id/:assoc':          'filterAssoc'
,   'PUT    /personas/:id/:assoc':          'createAssoc'
,   'DELETE /personas/:id/:assoc':          'deleteAssoc'
}

Estructura Modelo

{
    table_name: 'personas'
,   adapter: 'mongo'
,   content_type: 'hal'
,   beforeValidate: function() {}
,   beforeCreate: function() {}
,   afterCreate: function() {}
,   beforeUpdate: function() {}
,   afterUpdate: function() {}
,   beforeDestroy: function() {}
,   afterDestroy: function() {}
,   toJSON: function() {}
,   toHAL: function() {}
,   attributes:
    {
        //  Opcional
        id:
        {
            type: 'Primary Key'
        ,   unique: true
        }
    ,   nombre: 'String'
        //  No es Opcional
    ,   Madre:
        {
            type: 'Foreing Key'
        ,   model: 'Personas'
        }
    ,   Padre:
        {
            type: 'Foreing Key'
        ,   model: 'Personas'
        }
    ,   Hijos:
        {
            type: 'Foreing Key'
        ,   model: 'Personas'
        }
    }

,   associations:
    {
        Madre:
        {
            type: 'belongs-to'
        ,   model: 'Personas'       //  Modelo con que se relaciona
        }
    ,   Padre:
        {
            type: 'belongs-to'
        ,   model: 'Personas'       //  Modelo con que se relaciona
        }
    ,   Hijos:
        {
            type: 'has-many'
        ,   model: 'Personas'       //  Modelo con que se relaciona
        }
    ,   Nietos:
        {
            type: 'has-many:through'
        ,   embedded: 'partial'
        ,   model: 'Personas'       //  Modelo con que se relaciona
        ,   through: 'Hijos'        //  Assoc de la Instancia
        ,   association: 'Hijos'    //  Assoc de la/s Instancias del atributo Through de arriba
        }
    }
}

Otras Consideraciones

-   none    >   no sera embebido
-   partial >   sera embebido pero sus embebidos no tendran embebidos
-   full    >   sera embebido pero sus embebidos definiran si tendran o no embebidos
-   type:   Tipo de Collection (String)
            Valor por defecto: list
            Posibles Valores: list - pageable - scrollable
-   ipp:    LIMIT (Integer)
            Limite de items por pagina
            Valor por defecto: 10
            Si 0 entonces no tiene limites
-   page:   OFFSET (Integer)
            Pagina de inicio
            Valor por defecto: 1
            Si 0 entonces: 1
-   sortBy  Tipo de Orden
            Valor por defecto: Atributo ID, Criterio menor a mayor (<)
            atribute: Atributo del Modelo   (String)
            criteria: Criterio de Comparacion   (String)
                -   <   Menor a Mayor
                -   >   Mayor a Menor

Otras propiedades de las Asociaciones

-   TipoEmbedded
-   String (TipoCollection | Toma Valores por defecto)
-   Object (Detalles TipoCollection)