En la aplicación por defecto (creada con aoc-cli
), encontraréis una carpeta llamada sql
, con un archivo llamado
0001-nombre-de-su-aplicacion-bootstrap.sql
.
Este archivo contiene la creación de la tabla public.meta
, que contiene las columnas
de usuario de creación, fecha de creación, usuario de modificación y fecha de modificación.
Esta tabla está pensada para que sea heredada en todas las tablas de la base de datos. Estas columnas las gestiona internamente el framework.
El archivo también crea la tabla de usuarios users.aoc_user
, con los campos de nombre de usuario,
email, contraseña y nombre completo. Esta tabla puede modificarse siempre que se reflejen los cambios
en la configuración del framework.
El mapeado de los campos se realiza en app.module.ts
en el cliente:
AocAppModule.forRoot(
Config,
new AocUserConfig(AocUser, { fieldMap: { username: 'username', password: 'pass' }}),
...
y en el servidor, en el archivo user-definition.ts
:
@AocUserDefinition(new AocUserConfig(AocUser, {
fieldMap: {
username: 'username',
password: 'pass'
}
}))
class UserDefinition {}
A medida que vaya creando su aplicación, tendrá que crear más tablas y relaciones. Puede añadir nuevos
archivos 0002-lo-que-sea.sql
, 0003-otra-tabla.sql
. En cada archivo puede ir añadiendo o modificando
tablas, relaciones, o insertando filas, etc.
Con el comando aoc-cli generate database
puede ejecutar todos los archivos .sql
que se encuentren
en esa carpeta. Ejecute el comando con --help
o consulte la sección de documentación sobre aoc-cli
.
Obviamente, también puede ejecutar las órdenes sql manualmente sobre su servidor, o utilizar cualquier otra técnica de migración que estime oportuna.
Si quiere que sus transacciones entre en el ciclo de vida de la aplicación (ejecutando suscriptores de mikro-orm por ejemplo y otros hooks), le recomendamos los ejecute a través de mikro-orm, con las entidades en memoria, etc.
Cada vez que la estructura de la base de datos cambia, tiene que actualizar los modelos y las entidades de typescript para que reflejen la nueva estructura y así pueda usarla en el código de su aplicación.
aoc-user.ts
, cliente.ts
, factura.ts
, contacto.ts
, que se encuentran en el cliente. Son comparables a los POJO, POCO, etc.Para rehacer tanto los modelos como las entidades, utilizaremos aoc-cli generate entities
. Añada --help
para ver la ayuda del comando.
El archivo necesario que tiene la configuración para poder generar correctamente tanto modelos como entidades, se llama aoc-entities-config.json
.
Lo encontrará en la raíz de su aplicación, acompañado por un archivo aoc-entities-secrets.json
para especificar (o sobrescribir) parámetros más locales
como la conexión a la base de datos o las rutas en las que guardar modelos y entidades.
El esquema de definición json aoc-entities-config.schema.json le proporciona una explicación sobre cómo confeccionar este archivo. En la siguiente tabla le explicamos las propiedades:
Propiedad | Descripción |
---|---|
schemas |
Un array con los nombres de los esquemas que quiere procesar |
entityBaseClass |
La clase base de la que heredarán todas las demás entidades |
modelBaseClass |
La clase base de la que heredarán todos los demás modelos |
db |
Parámetros de conexión a la base de datos |
modelTargetPath |
Ruta absoluta o relativa donde se guardarán los modelos |
entityTargetPath |
Ruta absoluta o relativa donde se guardarán los entidades |
modelConfigTargetPath |
Ruta absoluta o relativa donde se guardarán los modelconfigs |
jsonColumns |
Array de estructuras JSON que use en campos de la base de datos |
pivotTables |
Definiciones de tablas pivote NM (ver mikro-orm) |
constEnums |
Definiciones de const enums de typescript para columnas |
virtualProperties |
Propiedades virtuales que quiera generar en sus entidades (ver mikro-orm) |
eager |
Carga automática de entidades, sin tener que usar populate (ver mikro-orm) |
lazy |
Array de campos de carga diferida formato esquema.tabla.columna |
embedTables |
Array de tablas para clases empotrables que se empotrarán en entidades |
embedMap |
Objeto que define mapeado entre tablas y empotrables |
cascades |
Objeto que define eliminación en cascada para claves extranjeras |
threadSafe |
Array de tablas (entidades) que serán seguros para concurrencia en operaciones de api |
inherits |
Tablas que heredan de otra tabla diferente a la base |
Cualquiera de estos parámetros puede estar en el archivo aoc-entities-secrets.json
y se aplicarán.
Por favor, busque en Issues y Discussions en Github para más información