2023-01-09 10:59:07 +00:00
|
|
|
import { Sequelize } from 'sequelize';
|
|
|
|
import dotenv from 'dotenv';
|
|
|
|
dotenv.config();
|
2022-12-19 12:21:35 +00:00
|
|
|
|
2023-01-11 12:13:22 +00:00
|
|
|
let sequelize = createConnection();
|
2022-12-19 12:21:35 +00:00
|
|
|
|
2023-02-01 12:23:06 +00:00
|
|
|
import botanicalNames from './tradeItem/botanicalNames.js';
|
|
|
|
import countryOfOriginIsoCodes from './tradeItem/countryOfOriginIsoCodes.js';
|
|
|
|
import packageModel from './tradeItem/package.js';
|
|
|
|
import packingConfigurations from './tradeItem/packingConfigurations.js';
|
|
|
|
import photos from './tradeItem/photos.js';
|
|
|
|
import seasonalPeriod from './tradeItem/seasonalPeriod.js';
|
|
|
|
import tradeItem from './tradeItem/tradeItem.js';
|
|
|
|
import clientConfig from './conf/clientConfig.js';
|
|
|
|
import characteristics from './tradeItem/characteristics.js';
|
|
|
|
import supplyLine from './supplyLine/supplyLine.js';
|
|
|
|
import volumePrices from './supplyLine/volumePrices.js';
|
|
|
|
import suppliers from './supplier/suppliers.js';
|
2022-12-19 12:21:35 +00:00
|
|
|
|
2023-01-11 13:37:46 +00:00
|
|
|
/**
|
|
|
|
* Contains all the models that are related to the application.
|
|
|
|
*
|
|
|
|
* @example
|
|
|
|
* models.tradeItem.findAll();
|
|
|
|
*
|
|
|
|
* @example
|
|
|
|
* models.tradeItem.findAll().then((data) => {
|
|
|
|
* console.log(data);
|
|
|
|
* });
|
|
|
|
*
|
|
|
|
* @example
|
|
|
|
* models.tradeItem.create({
|
|
|
|
* tradeItemName: 'Test',
|
|
|
|
* foo: 'bar',
|
|
|
|
* });
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @type {Object.<string, Sequelize.Model>}
|
|
|
|
*/
|
2022-12-19 12:21:35 +00:00
|
|
|
let models = {
|
2023-01-12 13:54:05 +00:00
|
|
|
tradeItem: tradeItem(sequelize),
|
2023-01-10 12:24:43 +00:00
|
|
|
packingConfigurations: packingConfigurations(sequelize),
|
2022-12-19 12:21:35 +00:00
|
|
|
photos: photos(sequelize),
|
2023-01-12 13:54:05 +00:00
|
|
|
characteristics: characteristics(sequelize),
|
|
|
|
countryOfOriginIsoCodes: countryOfOriginIsoCodes(sequelize),
|
|
|
|
package: packageModel(sequelize),
|
2022-12-19 12:21:35 +00:00
|
|
|
seasonalPeriod: seasonalPeriod(sequelize),
|
|
|
|
clientConfig: clientConfig(sequelize),
|
2023-01-12 13:54:05 +00:00
|
|
|
botanicalNames: botanicalNames(sequelize),
|
2023-01-16 13:52:08 +00:00
|
|
|
supplyLines: supplyLine(sequelize),
|
|
|
|
volumePrices: volumePrices(sequelize),
|
|
|
|
suppliers: suppliers(sequelize),
|
2022-12-19 12:21:35 +00:00
|
|
|
};
|
|
|
|
|
2023-01-12 13:54:05 +00:00
|
|
|
models.characteristics.belongsTo(models.tradeItem, {
|
|
|
|
foreignKey: 'tradeItemFk',
|
|
|
|
as: 'tradeItem_Fk',
|
|
|
|
targetKey: 'tradeItemId',
|
|
|
|
});
|
|
|
|
|
|
|
|
models.seasonalPeriod.belongsTo(models.tradeItem, {
|
|
|
|
foreignKey: 'tradeItemFk',
|
|
|
|
as: 'tradeItem_Fk',
|
|
|
|
targetKey: 'tradeItemId',
|
|
|
|
});
|
|
|
|
|
|
|
|
models.photos.belongsTo(models.tradeItem, {
|
|
|
|
foreignKey: 'tradeItemFk',
|
|
|
|
as: 'tradeItem_Fk',
|
|
|
|
targetKey: 'tradeItemId',
|
|
|
|
});
|
|
|
|
|
|
|
|
models.photos.hasMany(models.seasonalPeriod, {
|
|
|
|
foreignKey: 'photoFk',
|
|
|
|
as: 'seasonalPeriod_Fk',
|
|
|
|
targetKey: 'photoId',
|
|
|
|
});
|
|
|
|
models.seasonalPeriod.belongsTo(models.photos, {
|
|
|
|
foreignKey: 'photoFk',
|
|
|
|
as: 'photo_Fk',
|
|
|
|
targetKey: 'photoId',
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
models.packingConfigurations.belongsTo(models.tradeItem, {
|
|
|
|
foreignKey: 'tradeItemFk',
|
|
|
|
as: 'tradeItem_Fk',
|
|
|
|
targetKey: 'tradeItemId',
|
|
|
|
});
|
|
|
|
|
|
|
|
models.packingConfigurations.hasMany(models.package, {
|
|
|
|
foreignKey: 'packingConfigurationFk',
|
|
|
|
as: 'package_Fk',
|
|
|
|
targetKey: 'packingConfigurationId',
|
|
|
|
});
|
|
|
|
|
|
|
|
models.package.belongsTo(models.packingConfigurations, {
|
|
|
|
foreignKey: 'packingConfigurationFk',
|
|
|
|
as: 'packingConfiguration_Fk',
|
|
|
|
targetKey: 'packingConfigurationId',
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
models.botanicalNames.belongsTo(models.tradeItem, {
|
|
|
|
foreignKey: 'tradeItemFk',
|
|
|
|
as: 'tradeItem_Fk',
|
|
|
|
targetKey: 'tradeItemId',
|
|
|
|
});
|
|
|
|
|
|
|
|
models.countryOfOriginIsoCodes.belongsTo(models.tradeItem, {
|
|
|
|
foreignKey: 'tradeItemFk',
|
|
|
|
as: 'tradeItem_Fk',
|
|
|
|
targetKey: 'tradeItemId',
|
|
|
|
});
|
|
|
|
|
2023-01-16 13:52:08 +00:00
|
|
|
models.volumePrices.belongsTo(models.supplyLines, {
|
|
|
|
foreignKey: 'supplyLineFk',
|
|
|
|
as: 'supplyLine_Fk',
|
|
|
|
targetKey: 'supplyLineId',
|
|
|
|
});
|
|
|
|
|
|
|
|
models.supplyLines.belongsTo(models.tradeItem, {
|
|
|
|
foreignKey: 'tradeItemFk',
|
|
|
|
as: 'tradeItem_Fk',
|
|
|
|
targetKey: 'tradeItemId',
|
|
|
|
});
|
|
|
|
|
2023-01-11 12:13:22 +00:00
|
|
|
if (process.env.FORCE_SYNC) {
|
2023-01-09 10:59:07 +00:00
|
|
|
console.log('Syncing the models...');
|
|
|
|
await sequelize.sync({ force: true });
|
2023-01-10 12:24:43 +00:00
|
|
|
}
|
2023-01-09 11:08:30 +00:00
|
|
|
|
2023-01-11 12:13:22 +00:00
|
|
|
if (process.env.SECRETS) {
|
2023-01-09 11:08:30 +00:00
|
|
|
await models.clientConfig.create({
|
|
|
|
clientId: process.env.CLIENT_ID,
|
|
|
|
clientSecret: process.env.CLIENT_SECRET,
|
|
|
|
});
|
2023-01-09 09:06:34 +00:00
|
|
|
}
|
|
|
|
|
2023-01-11 13:37:46 +00:00
|
|
|
/**
|
|
|
|
* Creates the connection to the database.
|
|
|
|
*
|
|
|
|
* @example
|
|
|
|
* let sequelize = createConnection();
|
|
|
|
*
|
|
|
|
* @returns {Sequelize} Sequelize instance with the connection to the database.
|
|
|
|
*/
|
2023-01-11 12:13:22 +00:00
|
|
|
function createConnection() {
|
|
|
|
console.log('Creating the connection...');
|
|
|
|
return new Sequelize(process.env.DB_SCHEMA, process.env.DB_USER, process.env.DB_PWD, {
|
|
|
|
host: process.env.DB_HOST,
|
|
|
|
dialect: process.env.DB_DIALECT,
|
|
|
|
logging: false,
|
|
|
|
pool: {
|
2023-01-16 13:52:08 +00:00
|
|
|
max: 40,
|
2023-01-11 12:13:22 +00:00
|
|
|
min: 0,
|
|
|
|
acquire: 60000,
|
|
|
|
idle: 10000,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
export { models } ;
|