Aclaraciones de la documentación
🔥Nuestra documentación nos permite aclarar unos detalles que quedaron volando:
- Podemos utilizar
define
oextend Model
. - Se infiere el nombre de la tabla y se generaliza en plural,
sequelize.define('user', userSchema);
definirá la tablausers
. - Existe el modo de sincronización global
sequelize.sync()
o particular modelo.sync()` donde tendremos parámetros:force: true
. Eliminar la existencia previa y creando en secuencia.alter: true
. Revisa si se cambiará alguna estructura, la nueva vs la previa.
.
Configuración de ORM
ℹ️Repositorio: link
.
♻️Reutilizando las variables de entorno, las organizamos para determinar aquellas para database
.
config.js
. Archivo de definición de variables de entorno
/**
* @description variables of database server
*/
export const database = {
dbName: process.env.PGDATABASE,
dbHost: process.env.PGHOST || 'localhost',
dbPort: process.env.PGPORT || '5432',
dbUser: process.env.PGUSER,
dbPassword: process.env.PGPASSWORD,
};
.
♻️Definimos la librería de sequelize
mediante la abstracción OOP.
Sequelize.js
. Archivo de definición de variables de entorno
import { Sequelize as SequelizeClient } from 'sequelize';
import { database } from '../config/config';
import Error from '../utils/Error';
const USER = encodeURIComponent(database.dbUser);
const PASSWORD = encodeURIComponent(database.dbPassword);
const URI = `postgres://${USER}:${PASSWORD}@${database.dbHost}:${database.dbPort}/${database.dbName}`;
export default class Sequelize {
/**
* @private
* @description singleton pattern for pool connection
* @returns {object} - connection client
*/
async #connect() {
try {
if (!Sequelize.connection) {
Sequelize.connection = new SequelizeClient(URI, {
logging: false,
});
await Sequelize.connection.authenticate();
}
return Sequelize.connection;
} catch ({ message }) {
throw new Error(message, 'DRIVER');
}
}
/**
* @description process definition for create database tables
* @param {string} name - table name
* @param {string} schema - table description
* @returns {Promise} - response of library
*/
async define(name, schema) {
try {
const db = await this.#connect();
const model = await db.define(name, schema);
return await model.sync();
} catch (error) {
if (!error) throw new Error(message, 'DEFINITION');
throw error;
}
}
}
.
✨Creamos el schema
user.js
import { DataTypes, Sequelize as SequelizeClient } from 'sequelize';
/**
* @description description of each field in the table
* @typedef {Object} field definition
* @property {boolean} allowNull - false=NOT NULL
* @property {boolean} autoIncrement - each insert, increase the counter
* @property {boolean} primaryKey - define is primary key
* @property {boolean} type - expresion to match SQL type
* @property {boolean} unique - difne as unique the field
* @property {boolean} field - rename the field
*/
export default {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER,
},
email: {
allowNull: false,
type: DataTypes.STRING,
unique: true,
},
password: {
allowNull: false,
type: DataTypes.STRING,
},
createdAt: {
allowNull: false,
type: DataTypes.DATE,
field: 'created_at',
defaultValue: SequelizeClient.DATE,
},
updatedAt: {
allowNull: false,
type: DataTypes.DATE,
field: 'updated_at',
defaultValue: SequelizeClient.DATE,
},
};
.
✨Creamos nuestro seed
seed.js
. Archivo de creación de entorno limpionpm run seed
import Sequelize from './../libs/sequelize';
import userSchema from './models/user';
import { complete, fail } from '../utils/Log';
const sequelize = new Sequelize();
const user = sequelize.define('user', userSchema);
Promise.all([user])
.then((responses) => complete('Creation process', responses))
.catch(({ message }) => fail('Creation process', message));
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?