giganet_conecta
Version:
Aplicação com o fim de facilitar conexões com APi's e Banco de Dados (MySql, Mongo e Elasticsearch).
287 lines (258 loc) • 8.47 kB
JavaScript
const ConnectMysql = require("../Connect Mysql");
// Modelos
const CTOs = require("./Models/ctos");
const Clientes = require("./Models/clientes");
const Cidade = require("./Models/cidade");
const Contratos = require("./Models/contratos");
const DF_Elemento = require("./Models/df_elemento");
const Fibra = require("./Models/fibra");
const Empresa_Setor = require("./Models/empresa_setor");
const Funcionarios = require("./Models/funcionarios");
const Fornecedor = require("./Models/fornecedor");
const Fibra_Historico = require("./Models/historico");
const Logins = require("./Models/logins");
const OS = require("./Models/ordens_de_servico");
const OS_Arquivos = require("./Models/ordens_de_servico_arquivos");
const Transmissores = require("./Models/transmissores");
const OS_Mensagem = require("./Models/ordens_de_servico_mensagem");
const MovimentoProdutos = require("./Models/movimento_produtos");
const Produtos = require("./Models/produtos");
const Usuarios = require("./Models/usuarios");
const Usuarios_Grupo = require("./Models/usuarios_grupo");
const Planejamento_Analitico = require("./Models/planejamento_analitico");
const Fn_Pagar = require("./Models/fn_apagar");
const Fn_Areceber = require("./Models/fn_areceber");
const Fn_Movimentacao_Financeira = require("./Models/fn_movim_finan");
const Fn_despesa_tipo = require("./Models/fn_despesa_tipo");
const Servicos_Adicionais = require("./Models/servicos_adicionais");
const Vd_Contrato = require("./Models/vd_contrato");
const Veiculos = require("./Models/veiculos");
const Veiculos_Condutor = require("./Models/veiculos_condutor");
const VeiculosDespesas = require("./Models/veiculos_despesas");
const Vendedor = require("./Models/vendedor");
module.exports = async () => {
const database = "ixcprovedor";
const name_database = "IXC Soft";
try {
const {
DB_MYSQL_IXC_HOST,
DB_MYSQL_IXC_PORT,
DB_MYSQL_IXC_USER,
DB_MYSQL_IXC_PASSWORD,
} = process.env;
const sequelize = await ConnectMysql({
host: DB_MYSQL_IXC_HOST,
port: DB_MYSQL_IXC_PORT,
user: DB_MYSQL_IXC_USER,
password: DB_MYSQL_IXC_PASSWORD,
database,
name_database,
});
let [
clientes,
cidade,
contratos,
fibras,
logins,
planejamento_analitico,
fn_apagar,
fn_areceber,
fn_movimentacao_financeira,
fn_despesa_tipo,
os,
os_arquivos,
os_mensagem,
movimento_produtos,
produtos,
transmissores,
empresa_setor,
funcionarios,
fornecedor,
ctos,
fibra_historico,
df_elemento,
usuarios,
usuarios_grupo,
servicos_adicionais,
vd_contrato,
veiculos,
veiculos_condutor,
veiculos_despesas,
vendedor,
] = await Promise.all([
Clientes(sequelize),
Cidade(sequelize),
Contratos(sequelize),
Fibra(sequelize),
Logins(sequelize),
Planejamento_Analitico(sequelize),
Fn_Pagar(sequelize),
Fn_Areceber(sequelize),
Fn_Movimentacao_Financeira(sequelize),
Fn_despesa_tipo(sequelize),
OS(sequelize),
OS_Arquivos(sequelize),
OS_Mensagem(sequelize),
MovimentoProdutos(sequelize),
Produtos(sequelize),
Transmissores(sequelize),
Empresa_Setor(sequelize),
Funcionarios(sequelize),
Fornecedor(sequelize),
CTOs(sequelize),
Fibra_Historico(sequelize),
DF_Elemento(sequelize),
Usuarios(sequelize),
Usuarios_Grupo(sequelize),
Servicos_Adicionais(sequelize),
Vd_Contrato(sequelize),
Veiculos(sequelize),
Veiculos_Condutor(sequelize),
VeiculosDespesas(sequelize),
Vendedor(sequelize),
]);
clientes.hasMany(contratos, { foreignKey: "id_cliente" });
contratos.belongsTo(clientes, {
foreignKey: "id_cliente",
targetKey: "id",
});
clientes.belongsTo(cidade, {
foreignKey: "cidade",
targetKey: "id",
});
cidade.hasMany(clientes, {
foreignKey: "cidade",
sourceKey: "id",
});
clientes.hasMany(logins, { foreignKey: "id_cliente" });
logins.belongsTo(clientes, { foreignKey: "id_cliente", targetKey: "id" });
clientes.hasMany(fn_areceber, { foreignKey: "id_cliente" });
fn_areceber.belongsTo(clientes, { foreignKey: "id", targetKey: "id" });
// logins para fibras
logins.hasMany(fibras, { foreignKey: "id_login" });
fibras.belongsTo(logins, { foreignKey: "id_login", targetKey: "id" });
contratos.hasMany(logins, { foreignKey: "id_contrato" });
// Contrato para financeiro a receber
contratos.hasMany(fn_areceber, {
foreignKey: "id_contrato",
sourceKey: "id",
});
fn_areceber.belongsTo(contratos, {
foreignKey: "id",
sourceKey: "id_contrato",
});
contratos.hasMany(vd_contrato, {
foreignKey: "id",
sourceKey: "id_vd_contrato",
});
vd_contrato.belongsTo(contratos, {
foreignKey: "id_vd_contrato",
targetKey: "id",
});
// Contrato para vendedor
contratos.hasMany(vendedor, {
foreignKey: "id",
sourceKey: "id_vendedor",
});
vendedor.hasMany(contratos, {
foreignKey: "id_vendedor",
targetKey: "id",
});
// Contrato para movimentação de produtos
contratos.hasMany(movimento_produtos, {
foreignKey: "id_contrato",
sourceKey: "id",
});
// Os para movimentação de produtos
os.hasMany(movimento_produtos, { foreignKey: "id_oss_chamado" });
os.belongsTo(clientes, { foreignKey: "id_cliente", targetKey: "id" });
clientes.hasMany(os, { foreignKey: "id_cliente" });
os.hasMany(os_mensagem, { foreignKey: "id_chamado" });
os_mensagem.belongsTo(os, { foreignKey: "id_chamado" });
clientes.hasMany(funcionarios, {
foreignKey: "id",
sourceKey: "responsavel",
});
funcionarios.belongsTo(clientes, {
foreignKey: "responsavel",
targetKey: "id",
});
// Vendedor para funcionário
vendedor.hasMany(funcionarios, {
foreignKey: "cpf_cnpj",
sourceKey: "cnpj_cpf",
});
funcionarios.belongsTo(vendedor, {
foreignKey: "cpf_cnpj",
targetKey: "cnpj_cpf",
});
// Vendedor para usuarios
vendedor.hasMany(usuarios, {
foreignKey: "vendedor_padrao",
sourceKey: "id",
});
usuarios.belongsTo(vendedor, {
foreignKey: "vendedor_padrao",
targetKey: "id",
});
usuarios.belongsTo(usuarios_grupo, { foreignKey: "id_grupo" });
usuarios_grupo.hasMany(usuarios, { foreignKey: "id_grupo" });
usuarios.belongsTo(funcionarios, { foreignKey: "funcionario" });
funcionarios.hasMany(usuarios, { foreignKey: "funcionario" });
funcionarios.belongsTo(empresa_setor, {
foreignKey: "id_departamento",
targetKey: "id",
});
empresa_setor.hasMany(funcionarios, { foreignKey: "id_departamento" });
funcionarios.belongsTo(veiculos_condutor, {
foreignKey: "funcionario",
targetKey: "id",
});
veiculos_condutor.hasMany(funcionarios, { foreignKey: "funcionario" });
// Funcionário para cidades
funcionarios.belongsTo(cidade, {
foreignKey: "cidade", // Campo na tabela funcionarios
targetKey: "id", // Campo na tabela cidade
});
const DB_MYSQL_IXC_SOFT = {
clientes,
cidade,
contratos,
fibras,
logins,
planejamento_analitico,
fn_apagar,
fn_areceber,
fn_movimentacao_financeira,
fn_despesa_tipo,
os,
os_arquivos,
os_mensagem,
movimento_produtos,
produtos,
transmissores,
empresa_setor,
funcionarios,
fornecedor,
ctos,
fibra_historico,
df_elemento,
usuarios,
usuarios_grupo,
servicos_adicionais,
vd_contrato,
veiculos,
veiculos_condutor,
veiculos_despesas,
vendedor,
sequelize,
};
module.exports = DB_MYSQL_IXC_SOFT;
} catch (error) {
throw new Error(
`Erro ao conectar ao banco de dados (MySql) ${name_database}: ${
error instanceof Error ? error.message : error
}`,
);
}
};