node package manager

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)