From 6e9c8edbfdf2a69ca4aef3efb801601e90f81d81 Mon Sep 17 00:00:00 2001 From: gabriel-bueno32 Date: Thu, 25 Apr 2024 18:20:07 -0300 Subject: [PATCH 1/6] starting transtition to API specieslink --- src/herbarium/herbariumdatabase.js | 68 ++++++++++++++++++++++++++++++ src/herbarium/reflora/main.js | 2 +- src/models/Specieslink.js | 46 ++++++++++++++++++++ 3 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 src/models/Specieslink.js diff --git a/src/herbarium/herbariumdatabase.js b/src/herbarium/herbariumdatabase.js index cf58945..df20e25 100644 --- a/src/herbarium/herbariumdatabase.js +++ b/src/herbarium/herbariumdatabase.js @@ -17,6 +17,7 @@ import modeloEspecies from '../models/Especie'; import modeloFamilias from '../models/Familia'; import modeloGeneros from '../models/Genero'; import modeloReflora from '../models/Reflora'; +import modeloSpecieslink from '../models/Specieslink'; import modeloSubespecies from '../models/Subespecie'; import modeloTombos from '../models/Tombo'; import modeloTombosFotos from '../models/TomboFoto'; @@ -60,6 +61,20 @@ export function criaTabelaReflora() { return tabelaReflora; } +/** + * A função criaTabelaSpecieslink, cria uma tabela chamada reflora, + * com base no modelo que foi chamado e dentro desse modelo, + * existe nome das colunas que estarão presentes nessa tabela. + * Nessa tabela é guardado os códigos de barras, e as respostas das requisições. + * Detalhe force: true é igual ao drop table. + * @return tabelaSpecieslink, que é a tabela que foi criada. + */ +export function criaTabelaSpecieslink() { + const tabelaSpecieslink = modeloSpecieslink(conexao, Sequelize); + tabelaSpecieslink.sync({ force: true }); + return tabelaSpecieslink; +} + /** * A função selectTemExecucaoServico, realiza um consulta no banco de dados, * mas especificamente na tabela de configuracao, na qual é retornado registros @@ -307,6 +322,39 @@ export function insereTabelaReflora(tabelaReflora, listaCodBarra) { return promessa.promise; } +/** + * A função insereTabelaSpecieslink, percorre a lista que foi passada por parâmetro + * e a cada item dessa lista é adicionado o código de barra presente nessa + * lista na tabela do reflora. Um detalhe que vale a pena ressaltar é que + * Sem o throttle ele faz muitas conexões simultaneamente, acabando gerando + * erros. O throttle faz um por um, evitando erros. Algumas soluções no StackOverflow + * falavam para adicionar certas configurações na criação da conexão, porém nada deu certo. + * @param {*} tabelaSpecieslink, é a tabela do reflora aonde será adicionado os códigos de barra. + * @param {*} listaCodBarra, é a lista de códigos de barras que serão inseridos no + * banco de dados. + * @return promessa.promise, como é assíncrono ele só retorna quando resolver, ou seja, + * quando terminar de realizar a inserção. + */ +export function insereTabelaSpecieslink(tabelaSpecieslink, listaCodBarra) { + const throttle = throttledQueue(1, 200); + const promessa = Q.defer(); + listaCodBarra.forEach((codBarra, index) => { + throttle(() => { + tabelaSpecieslink.create({ + cod_barra: codBarra.dataValues.codigo_barra, + tombo_json: null, + ja_requisitou: false, + nro_requisicoes: 3, + }).then(() => { + if (index === listaCodBarra.length - 1) { + promessa.resolve(); + } + }); + }); + }); + return promessa.promise; +} + /** * A função selectUmCodBarra, realiza uma consulta no banco de dados onde são * retornados apenas um registro da tabela onde o valor da coluna é zero (ou seja, @@ -655,6 +703,26 @@ export function existeTabelaReflora() { return promessa.promise; } +/** + * A função existeTabelaReflora, executa um SHOW TABLES verificando + * se existe a tabela do reflora ou não. Se existir a tabela do reflora + * retorna true, e caso não exista false. + * @return promessa.promise, como é assíncrono ele só retorna quando resolver, ou seja, + * quando terminar de realizar a consulta de verificar se existe ou não a tabela. + */ +export function existeTabelaSpecieslink() { + const promessa = Q.defer(); + conexao.query('SHOW TABLES', { type: Sequelize.QueryTypes.SHOWTABLES }).then(listaTabelas => { + listaTabelas.forEach(tabelas => { + if (tabelas === 'specieslink') { + promessa.resolve(true); + } + }); + promessa.resolve(false); + }); + return promessa.promise; +} + /** * A função apagaTabelaReflora, executa um DROP TABLE, ou seja, * apagar uma tabela que no caso é a tabela do reflora. diff --git a/src/herbarium/reflora/main.js b/src/herbarium/reflora/main.js index df0bf79..220bba0 100644 --- a/src/herbarium/reflora/main.js +++ b/src/herbarium/reflora/main.js @@ -38,7 +38,7 @@ function comecaAtualizacaoReflora(nomeArquivo) { const tabelaReflora = criaTabelaReflora(); selectCodBarra().then(listaCodBarra => { // insereTabelaReflora(tabelaReflora, listaCodBarra.slice(0, 1)).then(() => { - insereTabelaReflora(tabelaReflora, geraListaAleatorio(listaCodBarra, 0)).then(() => { + insereTabelaReflora(tabelaReflora, geraListaAleatorio(listaCodBarra, 10)).then(() => { fazRequisicaoReflora(nomeArquivo).then(resultadoRequisicaoReflora => { if (resultadoRequisicaoReflora) { fazComparacaoTombo().then(resultadoComparacao => { diff --git a/src/models/Specieslink.js b/src/models/Specieslink.js new file mode 100644 index 0000000..9898ae5 --- /dev/null +++ b/src/models/Specieslink.js @@ -0,0 +1,46 @@ +function associate(/* modelos */) { +} + +export default (Sequelize, DataTypes) => { + + const attributes = { + id: { + type: DataTypes.INTEGER, + autoIncrement: true, + primaryKey: true, + }, + cod_barra: { + type: DataTypes.STRING(12), + allowNull: true, + }, + tombo_json: { + type: DataTypes.TEXT, + allowNull: true, + }, + ja_comparou: { + type: DataTypes.BOOLEAN, + defaultValue: false, + }, + ja_requisitou: { + type: DataTypes.BOOLEAN, + defaultValue: false, + }, + nro_requisicoes: { + type: DataTypes.INTEGER, + defaultValue: false, + }, + }; + + const options = { + freezeTableName: false, + // Disabilita o created_at e updated_at + timestamps: false, + tableName: 'specieslink', + }; + + const Model = Sequelize.define('specieslink', attributes, options); + + Model.associate = associate; + + return Model; +}; From 3b94e9cabaee3a6f8b77cfaed4fdc034d4e2837d Mon Sep 17 00:00:00 2001 From: gabriel-bueno32 Date: Thu, 13 Jun 2024 17:55:56 -0300 Subject: [PATCH 2/6] Refactor aprovarComJsonId --- src/controllers/pendencias-controller.js | 164 +++++++++++------------ 1 file changed, 81 insertions(+), 83 deletions(-) diff --git a/src/controllers/pendencias-controller.js b/src/controllers/pendencias-controller.js index be40c40..df4215e 100644 --- a/src/controllers/pendencias-controller.js +++ b/src/controllers/pendencias-controller.js @@ -1309,120 +1309,124 @@ export const visualizarComJsonId = (alteracao, hcf, transaction) => { export const aprovarComJsonId = (alteracao, hcf, transaction) => { const parametros = {}; - return Familia.findOne({ + return Tombo.findOne({ where: { - id: alteracao.familia_id, + hcf, }, transaction, }) - .then(familia => { - parametros.familia = familia; + .then(tombo => { + parametros.tombo = tombo; }) .then(() => { - if (alteracao.subfamilia_id) { - return Subfamilia.findOne({ + if (alteracao.especie_nome) { + return Especie.findOne({ where: { - id: alteracao.subfamilia_id, + nome: alteracao.especie_nome, }, + attributes: ['id', 'nome'], transaction, - }); + }) + .then(especie => { + parametros.especie = especie; + }); } return undefined; }) - .then(subfamilia => { - if (subfamilia) { - parametros.subfamilia = subfamilia; - } - if (alteracao.genero_id) { + .then(() => { + if (alteracao.genero_nome) { return Genero.findOne({ where: { - id: alteracao.genero_id, + nome: alteracao.genero_nome, }, + attributes: ['id', 'nome'], transaction, - }); + }) + .then(genero => { + parametros.genero = genero; + }); } return undefined; }) - .then(genero => { - if (genero) { - parametros.genero = genero; - } - if (alteracao.especie_id) { - return Especie.findOne({ + .then(() => { + if (alteracao.subfamilia_nome) { + return Subfamilia.findOne({ where: { - id: alteracao.especie_id, + nome: alteracao.subfamilia_nome, }, + attributes: ['id', 'nome'], transaction, - }); + }) + .then(subfamilia => { + parametros.subfamilia = subfamilia; + }); } return undefined; }) - .then(especie => { - if (especie) { - parametros.especie = especie; - } - if (alteracao.variedade_id) { - return Variedade.findOne({ + .then(() => { + if (alteracao.subespecie_nome) { + return Subespecie.findOne({ where: { - id: alteracao.variedade_id, + nome: alteracao.subespecie_nome, }, + attributes: ['id', 'nome'], transaction, - }); + }) + .then(subEspecie => { + parametros.subespecie = subEspecie; + }); } return undefined; }) - .then(variedade => { - if (variedade) { - parametros.variedade = variedade; - } - if (alteracao.subespecie_id) { - return Subespecie.findOne({ + .then(() => { + if (alteracao.variedade_nome) { + return Variedade.findOne({ where: { - id: alteracao.subespecie_id, + nome: alteracao.variedade_nome, }, + attributes: ['id', 'nome'], transaction, - }); + }) + .then(variedade => { + parametros.variedade = variedade; + }); } return undefined; }) - .then(subesp => { - if (subesp) { - parametros.subespecie = subespecie; - } - const update = {}; - if (parametros.familia) { - update.familia_id = parametros.familia.id; - update.nome_cientifico = `${parametros.familia.nome} `; - } - if (parametros.subfamilia) { - update.sub_familia_id = parametros.subfamilia.id; - update.nome_cientifico += `${parametros.subfamilia.nome} `; - } - if (parametros.genero) { - update.genero_id = parametros.genero.id; - update.nome_cientifico += `${parametros.genero.nome} `; - } - if (parametros.especie) { - update.especie_id = parametros.especie.id; - update.nome_cientifico += `${parametros.especie.nome} `; - } - if (parametros.subespecie) { - update.sub_especie_id = parametros.subespecie.id; - update.nome_cientifico += `${parametros.subespecie.nome} `; - } - if (parametros.variedade) { - update.variedade_id = parametros.variedade.id; - update.nome_cientifico += `${parametros.variedade.nome}`; - } - return Tombo.update(update, { - where: { - hcf, - ativo: true, - }, + .then(() => parametros.tombo.update({ + especie_id: parametros.especie ? parametros.especie.id : parametros.tombo.especie_id, + genero_id: parametros.genero ? parametros.genero.id : parametros.tombo.genero_id, + subfamilia_id: parametros.subfamilia ? parametros.subfamilia.id : parametros.tombo.subfamilia_id, + subespecie_id: parametros.subespecie ? parametros.subespecie.id : parametros.tombo.subespecie_id, + variedade_id: parametros.variedade ? parametros.variedade.id : parametros.tombo.variedade_id, + }, { + transaction, + })) + .then(() => + Promise.all([ + Genero.findOne({ + where: { + id: parametros.tombo.genero_id, + }, + attributes: ['nome'], + transaction, + }), + Especie.findOne({ + where: { + id: parametros.tombo.especie_id, + }, + attributes: ['nome'], + transaction, + }), + ]) + ) + .then(([genero, especie]) => + parametros.tombo.update({ + nome_cientifico: `${genero.nome} ${especie.nome}`, + }, { transaction, - }); - }) - .then(() => true); + }) + ); }; export const aprovarComJsonNome = (alteracao, hcf, transaction) => { @@ -1908,13 +1912,7 @@ export function aceitarPendencia(request, response, next) { .then(alt => { if (status === 'APROVADO') { const objetoAlterado = JSON.parse(alt.tombo_json); - if (objetoAlterado.hcf) { - retorno = aprovarComCadastro(alt.tombo_hcf, transaction); - } else if (objetoAlterado.familia_id) { - retorno = aprovarComJsonId(objetoAlterado, alt.tombo_hcf, transaction); - } else { - retorno = aprovarComJsonNome(objetoAlterado, alt.tombo_hcf, transaction); - } + retorno = aprovarComJsonId(objetoAlterado, alt.tombo_hcf, transaction); } return retorno; }); From f3bdd721131c9e8de08c5d4515bd495e5189386c Mon Sep 17 00:00:00 2001 From: gabriel-bueno32 Date: Thu, 13 Jun 2024 17:56:21 -0300 Subject: [PATCH 3/6] =?UTF-8?q?Corrige=20transforma=C3=A7=C3=A3o=20do=20lo?= =?UTF-8?q?g=20para=20objeto=20JSON?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/herbarium/log.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/herbarium/log.js b/src/herbarium/log.js index 34ed489..9770ae5 100644 --- a/src/herbarium/log.js +++ b/src/herbarium/log.js @@ -57,8 +57,11 @@ export function transformaLog(conteudo) { const transformacaoUm = conteudo.replace(/\[/g, ' "['); const transformacaoDois = transformacaoUm.replace(/\./g, '." ,'); const transformacaoTres = transformacaoDois.substring(0, transformacaoDois.lastIndexOf(',')); - const transformacaoQuatro = `{ "log": [ ${transformacaoTres} ] }`; - return JSON.parse(transformacaoQuatro); + + const jsonString = JSON.stringify(transformacaoTres); + const jsonObject = JSON.parse(jsonString); + + return jsonObject; } /** From ebf0e0af824b8ec8db0016a46c3ce868ac996b4f Mon Sep 17 00:00:00 2001 From: gabriel-bueno32 Date: Mon, 17 Jun 2024 22:11:52 -0300 Subject: [PATCH 4/6] Creating new especie or genero if it doesn't exist --- src/controllers/pendencias-controller.js | 231 ++++++++++++----------- 1 file changed, 121 insertions(+), 110 deletions(-) diff --git a/src/controllers/pendencias-controller.js b/src/controllers/pendencias-controller.js index df4215e..425d40e 100644 --- a/src/controllers/pendencias-controller.js +++ b/src/controllers/pendencias-controller.js @@ -1315,118 +1315,129 @@ export const aprovarComJsonId = (alteracao, hcf, transaction) => { }, transaction, }) - .then(tombo => { - parametros.tombo = tombo; - }) - .then(() => { - if (alteracao.especie_nome) { - return Especie.findOne({ - where: { - nome: alteracao.especie_nome, - }, - attributes: ['id', 'nome'], - transaction, - }) - .then(especie => { - parametros.especie = especie; - }); - } - return undefined; - }) - .then(() => { - if (alteracao.genero_nome) { - return Genero.findOne({ - where: { - nome: alteracao.genero_nome, - }, - attributes: ['id', 'nome'], - transaction, - }) - .then(genero => { - parametros.genero = genero; - }); - } - return undefined; - }) - .then(() => { - if (alteracao.subfamilia_nome) { - return Subfamilia.findOne({ - where: { - nome: alteracao.subfamilia_nome, - }, - attributes: ['id', 'nome'], - transaction, - }) - .then(subfamilia => { - parametros.subfamilia = subfamilia; - }); - } - return undefined; - }) - .then(() => { - if (alteracao.subespecie_nome) { - return Subespecie.findOne({ - where: { - nome: alteracao.subespecie_nome, - }, - attributes: ['id', 'nome'], - transaction, - }) - .then(subEspecie => { - parametros.subespecie = subEspecie; - }); - } - return undefined; - }) - .then(() => { - if (alteracao.variedade_nome) { - return Variedade.findOne({ - where: { - nome: alteracao.variedade_nome, - }, - attributes: ['id', 'nome'], - transaction, - }) - .then(variedade => { - parametros.variedade = variedade; - }); - } - return undefined; - }) - .then(() => parametros.tombo.update({ - especie_id: parametros.especie ? parametros.especie.id : parametros.tombo.especie_id, - genero_id: parametros.genero ? parametros.genero.id : parametros.tombo.genero_id, - subfamilia_id: parametros.subfamilia ? parametros.subfamilia.id : parametros.tombo.subfamilia_id, - subespecie_id: parametros.subespecie ? parametros.subespecie.id : parametros.tombo.subespecie_id, - variedade_id: parametros.variedade ? parametros.variedade.id : parametros.tombo.variedade_id, - }, { - transaction, - })) - .then(() => - Promise.all([ - Genero.findOne({ - where: { - id: parametros.tombo.genero_id, - }, - attributes: ['nome'], - transaction, - }), - Especie.findOne({ - where: { - id: parametros.tombo.especie_id, - }, - attributes: ['nome'], - transaction, - }), - ]) - ) - .then(([genero, especie]) => - parametros.tombo.update({ - nome_cientifico: `${genero.nome} ${especie.nome}`, - }, { + .then(tombo => { + parametros.tombo = tombo; + }) + .then(() => { + if (alteracao.genero_nome) { + return Genero.findOrCreate({ + where: { + nome: alteracao.genero_nome, + }, + defaults: { + nome: alteracao.genero_nome, + familia_id: parametros.tombo.dataValues.familia_id, + ativo: true, + }, + attributes: ['id', 'nome'], + transaction, + }) + .then(([genero]) => { + parametros.genero = genero; + }); + } + return undefined; + }) + .then(() => { + if (alteracao.especie_nome) { + return Especie.findOrCreate({ + where: { + nome: alteracao.especie_nome, + }, + defaults: { + nome: alteracao.especie_nome, + genero_id: parametros.tombo.dataValues.genero_id, + familia_id: parametros.tombo.dataValues.familia_id, + ativo: true, + }, + attributes: ['id', 'nome'], + transaction, + }) + .then(([especie]) => { + parametros.especie = especie; + }); + } + return undefined; + }) + .then(() => { + if (alteracao.subfamilia_nome) { + return Subfamilia.findOne({ + where: { + nome: alteracao.subfamilia_nome, + }, + attributes: ['id', 'nome'], + transaction, + }) + .then(subfamilia => { + parametros.subfamilia = subfamilia; + }); + } + return undefined; + }) + .then(() => { + if (alteracao.subespecie_nome) { + return Subespecie.findOne({ + where: { + nome: alteracao.subespecie_nome, + }, + attributes: ['id', 'nome'], + transaction, + }) + .then(subEspecie => { + parametros.subespecie = subEspecie; + }); + } + return undefined; + }) + .then(() => { + if (alteracao.variedade_nome) { + return Variedade.findOne({ + where: { + nome: alteracao.variedade_nome, + }, + attributes: ['id', 'nome'], transaction, }) - ); + .then(variedade => { + parametros.variedade = variedade; + }); + } + return undefined; + }) + .then(() => parametros.tombo.update({ + especie_id: parametros.especie ? parametros.especie.id : parametros.tombo.especie_id, + genero_id: parametros.genero ? parametros.genero.id : parametros.tombo.genero_id, + subfamilia_id: parametros.subfamilia ? parametros.subfamilia.id : parametros.tombo.subfamilia_id, + subespecie_id: parametros.subespecie ? parametros.subespecie.id : parametros.tombo.subespecie_id, + variedade_id: parametros.variedade ? parametros.variedade.id : parametros.tombo.variedade_id, + }, { + transaction, + })) + .then(() => + Promise.all([ + Genero.findOne({ + where: { + id: parametros.tombo.genero_id, + }, + attributes: ['nome'], + transaction, + }), + Especie.findOne({ + where: { + id: parametros.tombo.especie_id, + }, + attributes: ['nome'], + transaction, + }), + ]) + ) + .then(([genero, especie]) => + parametros.tombo.update({ + nome_cientifico: `${genero.nome} ${especie.nome}`, + }, { + transaction, + }) + ); }; export const aprovarComJsonNome = (alteracao, hcf, transaction) => { From a0803b48bab2af13b9d3a59e269c82d6a1373e94 Mon Sep 17 00:00:00 2001 From: Gabriel-Bueno32 Date: Thu, 23 Jan 2025 17:46:05 -0300 Subject: [PATCH 5/6] Add author information to JSON output and improve string comparison --- src/controllers/pendencias-controller.js | 263 ++++++++++++----------- src/herbarium/comparainformacao.js | 6 +- src/herbarium/reflora/tombos.js | 2 + 3 files changed, 145 insertions(+), 126 deletions(-) diff --git a/src/controllers/pendencias-controller.js b/src/controllers/pendencias-controller.js index 425d40e..abc65ff 100644 --- a/src/controllers/pendencias-controller.js +++ b/src/controllers/pendencias-controller.js @@ -6,6 +6,7 @@ import subespecie from '../validators/subespecie'; const { Alteracao, + Autor, Usuario, Herbario, Solo, @@ -1315,129 +1316,143 @@ export const aprovarComJsonId = (alteracao, hcf, transaction) => { }, transaction, }) - .then(tombo => { - parametros.tombo = tombo; - }) - .then(() => { - if (alteracao.genero_nome) { - return Genero.findOrCreate({ - where: { - nome: alteracao.genero_nome, - }, - defaults: { - nome: alteracao.genero_nome, - familia_id: parametros.tombo.dataValues.familia_id, - ativo: true, - }, - attributes: ['id', 'nome'], - transaction, - }) - .then(([genero]) => { - parametros.genero = genero; - }); - } - return undefined; - }) - .then(() => { - if (alteracao.especie_nome) { - return Especie.findOrCreate({ - where: { - nome: alteracao.especie_nome, - }, - defaults: { - nome: alteracao.especie_nome, - genero_id: parametros.tombo.dataValues.genero_id, - familia_id: parametros.tombo.dataValues.familia_id, - ativo: true, - }, - attributes: ['id', 'nome'], - transaction, - }) - .then(([especie]) => { - parametros.especie = especie; - }); - } - return undefined; - }) - .then(() => { - if (alteracao.subfamilia_nome) { - return Subfamilia.findOne({ - where: { - nome: alteracao.subfamilia_nome, - }, - attributes: ['id', 'nome'], - transaction, - }) - .then(subfamilia => { - parametros.subfamilia = subfamilia; - }); - } - return undefined; - }) - .then(() => { - if (alteracao.subespecie_nome) { - return Subespecie.findOne({ - where: { - nome: alteracao.subespecie_nome, - }, - attributes: ['id', 'nome'], - transaction, - }) - .then(subEspecie => { - parametros.subespecie = subEspecie; - }); - } - return undefined; - }) - .then(() => { - if (alteracao.variedade_nome) { - return Variedade.findOne({ - where: { - nome: alteracao.variedade_nome, - }, - attributes: ['id', 'nome'], - transaction, - }) - .then(variedade => { - parametros.variedade = variedade; - }); - } - return undefined; - }) - .then(() => parametros.tombo.update({ - especie_id: parametros.especie ? parametros.especie.id : parametros.tombo.especie_id, - genero_id: parametros.genero ? parametros.genero.id : parametros.tombo.genero_id, - subfamilia_id: parametros.subfamilia ? parametros.subfamilia.id : parametros.tombo.subfamilia_id, - subespecie_id: parametros.subespecie ? parametros.subespecie.id : parametros.tombo.subespecie_id, - variedade_id: parametros.variedade ? parametros.variedade.id : parametros.tombo.variedade_id, - }, { - transaction, - })) - .then(() => - Promise.all([ - Genero.findOne({ - where: { - id: parametros.tombo.genero_id, - }, - attributes: ['nome'], - transaction, - }), - Especie.findOne({ - where: { - id: parametros.tombo.especie_id, - }, - attributes: ['nome'], - transaction, - }), - ]) - ) - .then(([genero, especie]) => - parametros.tombo.update({ - nome_cientifico: `${genero.nome} ${especie.nome}`, + .then(tombo => { + parametros.tombo = tombo; + }) + .then(() => { + if (alteracao.genero_nome) { + return Genero.findOrCreate({ + where: { + nome: alteracao.genero_nome, + }, + defaults: { + nome: alteracao.genero_nome, + familia_id: parametros.tombo.dataValues.familia_id, + ativo: true, + }, + attributes: ['id', 'nome'], + transaction, + }) + .then(([genero]) => { + parametros.genero = genero; + }); + } + return undefined; + }) + .then(() => { + if (alteracao.especie_nome) { + const iniciais = alteracao.autor.match(/([A-Z])/g).join('.'); + return Autor.findOrCreate({ + where: { + nome: alteracao.autor, + }, + defaults: { + nome: alteracao.autor, + iniciais, + ativo: true, + }, + attributes: ['id', 'nome', 'iniciais'], + transaction, + }) + .then(([autor]) => Especie.findOrCreate({ + where: { + nome: alteracao.especie_nome, + }, + defaults: { + nome: alteracao.especie_nome, + genero_id: parametros.tombo.dataValues.genero_id, + familia_id: parametros.tombo.dataValues.familia_id, + autor_id: autor.id, + ativo: true, + }, + attributes: ['id', 'nome'], + transaction, + }) + .then(([especie]) => { + parametros.especie = especie; + })); + } + return undefined; + }) + .then(() => { + if (alteracao.subfamilia_nome) { + return Subfamilia.findOne({ + where: { + nome: alteracao.subfamilia_nome, + }, + attributes: ['id', 'nome'], + transaction, + }) + .then(subfamilia => { + parametros.subfamilia = subfamilia; + }); + } + return undefined; + }) + .then(() => { + if (alteracao.subespecie_nome) { + return Subespecie.findOne({ + where: { + nome: alteracao.subespecie_nome, + }, + attributes: ['id', 'nome'], + transaction, + }) + .then(subEspecie => { + parametros.subespecie = subEspecie; + }); + } + return undefined; + }) + .then(() => { + if (alteracao.variedade_nome) { + return Variedade.findOne({ + where: { + nome: alteracao.variedade_nome, + }, + attributes: ['id', 'nome'], + transaction, + }) + .then(variedade => { + parametros.variedade = variedade; + }); + } + return undefined; + }) + .then(() => parametros.tombo.update({ + especie_id: parametros.especie ? parametros.especie.id : parametros.tombo.especie_id, + genero_id: parametros.genero ? parametros.genero.id : parametros.tombo.genero_id, + subfamilia_id: parametros.subfamilia ? parametros.subfamilia.id : parametros.tombo.subfamilia_id, + subespecie_id: parametros.subespecie ? parametros.subespecie.id : parametros.tombo.subespecie_id, + variedade_id: parametros.variedade ? parametros.variedade.id : parametros.tombo.variedade_id, }, { transaction, - }) - ); + })) + .then(() => + Promise.all([ + Genero.findOne({ + where: { + id: parametros.tombo.genero_id, + }, + attributes: ['nome'], + transaction, + }), + Especie.findOne({ + where: { + id: parametros.tombo.especie_id, + }, + attributes: ['nome'], + transaction, + }), + ]) + ) + .then(([genero, especie]) => + parametros.tombo.update({ + nome_cientifico: `${genero.nome} ${especie.nome}`, + }, { + transaction, + }) + ); }; export const aprovarComJsonNome = (alteracao, hcf, transaction) => { @@ -1662,8 +1677,8 @@ export const visualizarComJsonNome = (alteracao, hcf, transaction) => Tombo.find transaction, }) .then(tombos => { - // eslint-disable-next-line - var jsonRetorno = []; + // eslint-disable-next-line + var jsonRetorno = []; if (tombos.especy) { if (alteracao.especie_nome) { if (tombos.especy.nome !== alteracao.especie_nome || tombos.rascunho) { @@ -1672,6 +1687,7 @@ export const visualizarComJsonNome = (alteracao, hcf, transaction) => Tombo.find campo: 'Especie', antigo: tombos.especy.nome, novo: alteracao.especie_nome, + autor: alteracao.autor, }); } } @@ -1681,6 +1697,7 @@ export const visualizarComJsonNome = (alteracao, hcf, transaction) => Tombo.find campo: 'Especie', antigo: '', novo: alteracao.especie_nome, + autor: alteracao.autor, }); } if (tombos.familia) { diff --git a/src/herbarium/comparainformacao.js b/src/herbarium/comparainformacao.js index 9ec1104..57711bf 100644 --- a/src/herbarium/comparainformacao.js +++ b/src/herbarium/comparainformacao.js @@ -107,7 +107,7 @@ export function ehIgualFamilia(idFamilia, nomeFamiliaHerbarioVirtual) { } const processaNomeFamiliaBD = processaString(nomeFamiliaBd); const processaNomeFamiliaReflora = processaString(nomeFamiliaHerbarioVirtual); - if (processaNomeFamiliaBD === processaNomeFamiliaReflora) { + if (processaNomeFamiliaBD.toLowerCase() === processaNomeFamiliaReflora.toLowerCase()) { promessa.resolve(-1); return promessa.promise; } @@ -158,7 +158,7 @@ export function ehIgualGenero(idGenero, nomeGeneroHerbarioVirtual) { } const processaNomeGeneroBd = processaString(nomeGeneroBd); const processaNomeGeneroReflora = processaString(nomeGeneroHerbarioVirtual); - if (processaNomeGeneroBd === processaNomeGeneroReflora) { + if (processaNomeGeneroBd.toLowerCase() === processaNomeGeneroReflora.toLowerCase()) { promessa.resolve(-1); return promessa.promise; } @@ -209,7 +209,7 @@ export function ehIgualEspecie(idEspecie, nomeEspecieHerbarioVirtual) { } const processaNomeEspecieBd = processaString(nomeEspecieBd); const processaNomeEspecieReflora = processaString(nomeEspecieHerbarioVirtual); - if (processaNomeEspecieBd === processaNomeEspecieReflora) { + if (processaNomeEspecieBd.toLowerCase() === processaNomeEspecieReflora.toLowerCase()) { promessa.resolve(-1); return promessa.promise; } diff --git a/src/herbarium/reflora/tombos.js b/src/herbarium/reflora/tombos.js index 2b293f9..ce418e7 100644 --- a/src/herbarium/reflora/tombos.js +++ b/src/herbarium/reflora/tombos.js @@ -68,6 +68,7 @@ export async function geraJsonAlteracao(nroTombo, codBarra, informacaoReflora) { await ehIgualGenero(processaInformacaoBd.genero_id, informacaoReflora.genus).then(genero => { if (genero !== -1) { alteracaoInformacao += `"genero_nome": "${genero}", `; + alteracaoInformacao += `"autor": "${informacaoReflora.scientificnameauthorship}", `; } }); } @@ -76,6 +77,7 @@ export async function geraJsonAlteracao(nroTombo, codBarra, informacaoReflora) { await ehIgualEspecie(processaInformacaoBd.especie_id, informacaoReflora.specificepithet).then(especie => { if (especie !== -1) { alteracaoInformacao += `"especie_nome": "${especie}", `; + alteracaoInformacao += `"autor": "${informacaoReflora.scientificnameauthorship}", `; } }); } From ebdaa9608ae606eb41ef9879d55ef6db23b0297b Mon Sep 17 00:00:00 2001 From: Gabriel-Bueno32 Date: Thu, 23 Jan 2025 19:04:27 -0300 Subject: [PATCH 6/6] return all data --- src/herbarium/reflora/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/herbarium/reflora/main.js b/src/herbarium/reflora/main.js index 77c04ba..0ccd05c 100644 --- a/src/herbarium/reflora/main.js +++ b/src/herbarium/reflora/main.js @@ -38,7 +38,7 @@ function comecaAtualizacaoReflora(nomeArquivo) { const tabelaReflora = criaTabelaReflora(); selectCodBarra().then(listaCodBarra => { // insereTabelaReflora(tabelaReflora, listaCodBarra.slice(0, 1)).then(() => { - insereTabelaReflora(tabelaReflora, geraListaAleatorio(listaCodBarra, 10)).then(() => { + insereTabelaReflora(tabelaReflora, geraListaAleatorio(listaCodBarra, 0)).then(() => { fazRequisicaoReflora(nomeArquivo).then(resultadoRequisicaoReflora => { if (resultadoRequisicaoReflora) { fazComparacaoTombo().then(resultadoComparacao => {