diff --git a/models/sequelize.js b/models/sequelize.js index 47a4519..f3b371b 100644 --- a/models/sequelize.js +++ b/models/sequelize.js @@ -87,96 +87,75 @@ let models = { package: packageModel(sequelize), }; +// Foreign Keys try { - // Remove ID atribute from models - models.characteristic.removeAttribute('id'); - models.seasonalPeriod.removeAttribute('id'); - models.package.removeAttribute('id'); - models.botanicalName.removeAttribute('id'); - models.countryOfOriginIsoCode.removeAttribute('id'); - // ------------------------------- - models.characteristic.belongsTo(models.tradeItem, { foreignKey: 'tradeItemId', - as: 'tradeItem_Fk', targetKey: 'tradeItemId', }); models.seasonalPeriod.belongsTo(models.tradeItem, { foreignKey: 'tradeItemId', - as: 'tradeItem_Fk', targetKey: 'tradeItemId', }); models.photo.belongsTo(models.tradeItem, { foreignKey: 'tradeItemId', - as: 'tradeItem_Fk', targetKey: 'tradeItemId', }); models.packingConfiguration.belongsTo(models.tradeItem, { foreignKey: 'tradeItemId', - as: 'tradeItem_Fk', targetKey: 'tradeItemId', }); models.packingConfiguration.hasMany(models.package, { - foreignKey: 'packingConfigurationFk', - as: 'package_Fk', + foreignKey: 'packingConfigurationId', targetKey: 'packingConfigurationId', }); models.package.belongsTo(models.packingConfiguration, { - foreignKey: 'packingConfigurationFk', - as: 'packingConfiguration_Fk', + foreignKey: 'packingConfigurationId', targetKey: 'packingConfigurationId', }); models.botanicalName.belongsTo(models.tradeItem, { foreignKey: 'tradeItemId', - as: 'tradeItem_Fk', targetKey: 'tradeItemId', }); models.countryOfOriginIsoCode.belongsTo(models.tradeItem, { foreignKey: 'tradeItemId', - as: 'tradeItem_Fk', targetKey: 'tradeItemId', }); models.volumePrices.belongsTo(models.supplyLine, { foreignKey: 'supplyLineId', - as: 'supplyLine_Fk', targetKey: 'supplyLineId', }); models.supplyLine.belongsTo(models.tradeItem, { foreignKey: 'tradeItemId', - as: 'tradeItem_Fk', targetKey: 'tradeItemId', }); models.supplyLine.belongsTo(models.warehouses, { foreignKey: 'warehouseId', - as: 'warehouse_Fk', targetKey: 'warehouseId', }); models.tradeItem.belongsTo(models.organization, { foreignKey: 'organizationId', - as: 'Organization_Fk', targetKey: 'organizationId', }); models.supplyLine.belongsTo(models.organization, { foreignKey: 'organizationId', - as: 'Organization_Fk', targetKey: 'organizationId', }); models.warehouses.belongsTo(models.organization, { foreignKey: 'organizationId', - as: 'Organization_Fk', targetKey: 'organizationId', }); } catch (err) { diff --git a/models/tradeItem/botanicalNames.js b/models/tradeItem/botanicalNames.js index cd795d7..f76fae2 100644 --- a/models/tradeItem/botanicalNames.js +++ b/models/tradeItem/botanicalNames.js @@ -1,9 +1,16 @@ import { Sequelize } from 'sequelize'; const botanicalNames = { + botanicalNameId: { + type: Sequelize.STRING, + primaryKey: true, + }, name: { type: Sequelize.STRING, }, + tradeItemId: { + type: Sequelize.STRING, + }, }; export default (sequelize) => { diff --git a/models/tradeItem/characteristics.js b/models/tradeItem/characteristics.js index 08e2b6f..d78f851 100644 --- a/models/tradeItem/characteristics.js +++ b/models/tradeItem/characteristics.js @@ -1,8 +1,13 @@ import { Sequelize } from 'sequelize'; const characteristics = { + tradeItemId: { + type: Sequelize.STRING, + primaryKey: true, + }, vbnCode: { type: Sequelize.STRING, + primaryKey: true, }, vbnValueCode: { type: Sequelize.STRING, diff --git a/models/tradeItem/countryOfOriginIsoCodes.js b/models/tradeItem/countryOfOriginIsoCodes.js index 32f88e3..1d8bd49 100644 --- a/models/tradeItem/countryOfOriginIsoCodes.js +++ b/models/tradeItem/countryOfOriginIsoCodes.js @@ -1,8 +1,13 @@ import { Sequelize } from 'sequelize'; const countryOfOriginIsoCodes = { + tradeItemId: { + type: Sequelize.STRING, + primaryKey: true, + }, isoCode: { type: Sequelize.STRING, + primaryKey: true, }, }; diff --git a/models/tradeItem/package.js b/models/tradeItem/package.js index b8a4a0e..e389608 100644 --- a/models/tradeItem/package.js +++ b/models/tradeItem/package.js @@ -1,8 +1,13 @@ import { Sequelize } from 'sequelize'; const PackageModel = { + packingConfigurationId: { + type: Sequelize.STRING, + primaryKey: true, + }, vbnPackageCode: { type: Sequelize.INTEGER, + primaryKey: true, }, customPackageId: { type: Sequelize.STRING, @@ -10,7 +15,7 @@ const PackageModel = { }; export default (sequelize) => { - const Package = sequelize.define('package', PackageModel, { + const Package = sequelize.define('tradeItem_packingConfigurations_package', PackageModel, { timestamps: false, freezeTableName: true, }); diff --git a/models/tradeItem/photos.js b/models/tradeItem/photos.js index 8599f88..3e31784 100644 --- a/models/tradeItem/photos.js +++ b/models/tradeItem/photos.js @@ -1,12 +1,13 @@ import { Sequelize } from 'sequelize'; const photos = { - id: { + tradeItemId: { type: Sequelize.STRING, primaryKey: true, }, url: { type: Sequelize.STRING, + primaryKey: true, }, type: { type: Sequelize.STRING, diff --git a/models/tradeItem/seasonalPeriod.js b/models/tradeItem/seasonalPeriod.js index 2cec803..0f10934 100644 --- a/models/tradeItem/seasonalPeriod.js +++ b/models/tradeItem/seasonalPeriod.js @@ -1,16 +1,17 @@ import { Sequelize } from 'sequelize'; const seasonalPeriod = { - id: { - type: Sequelize.INTEGER, + tradeItemId: { + type: Sequelize.STRING, primaryKey: true, - autoIncrement: true, }, startWeek: { type: Sequelize.INTEGER, + primaryKey: true, }, endWeek: { type: Sequelize.INTEGER, + primaryKey: true, }, }; diff --git a/utils.js b/utils.js index 4f24f00..7fe8de3 100644 --- a/utils.js +++ b/utils.js @@ -196,7 +196,7 @@ export async function syncSuppliers(){ let timeFinish, timeToGoSec, timeToGoMin, timeLeft; for (let curSequenceNumber = 0; curSequenceNumber <= maxSequenceNumber; curSequenceNumber++) { let timeStart = new moment(); - let data = (await vnRequest('GET', `${env.API_URL}/organizations/sync/${curSequenceNumber}?organizationType=SUPPLIER`, null, headers)).data; + let data = (await vnRequest('GET', `${env.API_URL}/organizations/sync/${curSequenceNumber}?organizationType=SUPPLIER`)).data; let suppliers = data.results; for (let supplier of suppliers) { @@ -232,26 +232,37 @@ export async function syncSuppliers(){ */ export async function syncConnections(){ await deleteConnections(); - const spinner = ora(`Creating connections...`).start(); + + let spinner; try { - let connections = await models.organization.findAll({ + let connectionsInDb = await models.organization.findAll({ attributes: ['organizationId'], where: { isConnected: true } }); - const remoteConnections = (await vnRequest('GET', `${env.API_URL}/connections`)).data; + const connectionsInFloriday = (await vnRequest('GET', `${env.API_URL}/connections`)).data; + + let isExists = false, connectionsToPut = []; + for (let connectionInDb of connectionsInDb) { + for (let connectionInFloriday of connectionsInFloriday) + if (connectionInFloriday == connectionInDb.organizationId) { + isExists = true; + break; + } + if (!isExists) connectionsToPut.push(connectionInDb.organizationId) + isExists = false; + } + + if (connectionsToPut.length) spinner = ora(`Creating connections in Floriday...`).start(); let i = 1; - for (let connection of connections) { - spinner.text = `Creating ${i++} of ${connections.length} connections...` - let remoteConnection = remoteConnections.find(remoteConnection => remoteConnection == connection.organizationId); - - if (!remoteConnection) - await vnRequest('PUT', `${env.API_URL}/connections/${connection.organizationId}`); + for (let connection of connectionsToPut) { + spinner.text = `Creating ${i++} of ${connectionsToPut.length} connections in Floriday...` + await vnRequest('PUT', `${env.API_URL}/connections/${connection}`); } - spinner.succeed(); + if (spinner) spinner.succeed(); } catch (err) { - spinner.fail(); + if (spinner) spinner.fail(); throw new Error(err); } } @@ -265,7 +276,7 @@ export async function syncTradeItems(){ attributes: ['organizationId'], where: { isConnected: true } }); - let i = 1, x = 1; + let i = 0, x = 0; for (let supplier of suppliers) { try { const params = new URLSearchParams({ @@ -274,7 +285,7 @@ export async function syncTradeItems(){ let tradeItems = (await vnRequest('GET', `${env.API_URL}/trade-items?${params}`)).data spinner.text = `Syncing ${i} trade items of [${x++}|${suppliers.length}] suppliers...` - if (!tradeItems.length) continue; + if (!tradeItems.length) continue; for (let tradeItem of tradeItems) { await insertItem(tradeItem); @@ -422,7 +433,7 @@ export async function insertItem(tradeItem) { await models.package.upsert({ ...packingConfiguration.package, - packingConfigurationFk: uuid, + packingConfigurationId: uuid, }, { transaction: tx }); } @@ -441,6 +452,7 @@ export async function insertItem(tradeItem) { if (tradeItem.botanicalNames.length) for (const botanicalName of tradeItem.botanicalNames) { await models.botanicalName.upsert({ + botanicalNameId: uuidv4(), name: botanicalName, tradeItemId: tradeItem.tradeItemId, }, { transaction: tx }); @@ -463,7 +475,7 @@ export async function syncWarehouses(){ where: { isConnected: true } }); - let x = 0, i = 1; + let x = 0, i = 0; for (let supplier of suppliers) { spinner.text = `Syncing ${i} warehouses of [${x++}|${suppliers.length}] suppliers...` const warehouses = (await vnRequest('GET', `${env.API_URL}/organizations/supplier/${supplier.organizationId}/warehouses`)).data; @@ -517,7 +529,7 @@ export async function deleteConnections() { spinner = ora(`Deleting connections that aren't in the db...`).start(); for (let connection of ghostConnections) { - await vnRequest('DELETE', `${env.API_URL}/connections/${connection}`, null, headers); + await vnRequest('DELETE', `${env.API_URL}/connections/${connection}`); spinner.text = `Deleting ${i++} of ${ghostConnections.length} that aren't in the db...` } if (spinner) spinner.succeed();