Giter Site home page Giter Site logo

hcf-api's People

Contributors

edvaldoszy avatar ncs92 avatar ryanramos01 avatar william-reticena avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

hcf-api's Issues

[API] Refatoração na migração e relações de coletores com o Tombo

Com intuito de organizar e melhoras as relações do tombo com coletores, foi decidido fazer uma refatoração em como os registros são armazenados.

A partir de agora vamos somente o ID do coletor principal no tombo, os coletores complementares serão armazenados em um único campo de texto numa tabela chamada coletores_complementares.

O diagrama abaixo exemplifica como as tabelas vão ficar:

image

[API] Atualização de bibliotecas do projeto

User Statement

Como desenvolvedor do projeto da API

(1)
quero fazer uso de tecnologias mais recentes
para melhorar a produtividade e legibilidade do código

(2)
quero atualizar as bibliotecas do projeto
para evitar problemas de segurança

Technical Info

Checklist

  • Adicionar TypeScript

Acceptance Criteria

[API] Solo, vegetação e relevo não estão sendo salvos

Ao cadastrar um novo tombo, embora o painel esteja enviando as informações de solo, relevo e vegetação, a API não está salvando as informações.

Image


Acceptance criteria

# Given When Then
1 O usuário está cadastrando um novo tombo Qualquer um dos campos "Solo", "Relevo" ou "Vegetação" for preenchido A API deve salvar as informações corretamente no banco para consulta posterior
2 O usuário está cadastrando um novo tombo Qualquer um dos campos "Solo", "Relevo" ou "Vegetação" não for preenchido A API não deve impedir o tombo de ser cadastrado, mantendo os valores não preenchidos como nulos

[API] Exibir parentesco e associações nas listagens

Adicionar as informações (se necessário) no retorno das rotas:

Subfamílias

  • Família (com filtro)
  • Autor

Image

Gênero

  • Família (com filtro)

Image

Espécies

  • Família (com filtro)
  • Gênero (com filtro)
  • Autor

Image

Subespécies

  • Família (com filtro)
  • Gênero (com filtro)
  • Espécie (com filtro)
  • Autor

Image

Variedades

  • Família (com filtro)
  • Gênero (com filtro)
  • Espécie (com filtro)
  • Autor

Image

Autores

  • Iniciais

Image

[API] Impossibilitar a exclusão de registros com outros registros associados

Overview

Hoje o sistema está permitindo que eu faça a exclusão de um registro de família que tenha subfamília associadas, o que não deve acontecer.

Technical info

O painel hoje tem um botão de exclusão de um registro nas listagens de taxonomia, que pode ser usado mesmo em registros com outros registros associados.

Você deve fazer uma validação se o registro que está sendo excluído possui registros associados ou não (família e subfamília por exemplo) e retornar um error dizendo que a operação não pode ser realizada.

[API] Falha na listagem de herbários

Technical Info

O endpoint para listagem de herbários está retornando erro (500 Internal Server Error), veja os detalhes abaixo:

2023-10-24T01:20:49.245887753Z DatabaseError [SequelizeDatabaseError]: Unknown column 'endereco->cidade.latitude' in 'field list'
2023-10-24T01:20:49.245904127Z at Query.formatError (/home/node/app/node_modules/sequelize/lib/dialects/mysql/query.js:247:16)
2023-10-24T01:20:49.245910335Z at Query.handler [as onResult] (/home/node/app/node_modules/sequelize/lib/dialects/mysql/query.js:68:23)
2023-10-24T01:20:49.245915842Z at Query.execute (/home/node/app/node_modules/mysql2/lib/commands/command.js:36:14)
2023-10-24T01:20:49.245952518Z at Connection.handlePacket (/home/node/app/node_modules/mysql2/lib/connection.js:478:34)
2023-10-24T01:20:49.245957834Z at PacketParser.onPacket (/home/node/app/node_modules/mysql2/lib/connection.js:97:12)
2023-10-24T01:20:49.245962700Z at PacketParser.executeStart (/home/node/app/node_modules/mysql2/lib/packet_parser.js:75:16)
2023-10-24T01:20:49.245967680Z at Socket.<anonymous> (/home/node/app/node_modules/mysql2/lib/connection.js:104:25)
2023-10-24T01:20:49.245972962Z at Socket.emit (node:events:513:28)
2023-10-24T01:20:49.245977672Z at addChunk (node:internal/streams/readable:324:12)
2023-10-24T01:20:49.245982396Z at readableAddChunk (node:internal/streams/readable:297:9)
2023-10-24T01:20:49.245987144Z at Readable.push (node:internal/streams/readable:234:10)
2023-10-24T01:20:49.245992088Z at TCP.onStreamRead (node:internal/stream_base_commons:190:23) {
2023-10-24T01:20:49.245996879Z parent: Error: Unknown column 'endereco->cidade.latitude' in 'field list'
2023-10-24T01:20:49.246001785Z at Packet.asError (/home/node/app/node_modules/mysql2/lib/packets/packet.js:728:17)
2023-10-24T01:20:49.246010409Z at Query.execute (/home/node/app/node_modules/mysql2/lib/commands/command.js:29:26)
2023-10-24T01:20:49.246015353Z at Connection.handlePacket (/home/node/app/node_modules/mysql2/lib/connection.js:478:34)
2023-10-24T01:20:49.246020169Z at PacketParser.onPacket (/home/node/app/node_modules/mysql2/lib/connection.js:97:12)
2023-10-24T01:20:49.246024998Z at PacketParser.executeStart (/home/node/app/node_modules/mysql2/lib/packet_parser.js:75:16)
2023-10-24T01:20:49.246030036Z at Socket.<anonymous> (/home/node/app/node_modules/mysql2/lib/connection.js:104:25)
2023-10-24T01:20:49.246035052Z at Socket.emit (node:events:513:28)
2023-10-24T01:20:49.246039746Z at addChunk (node:internal/streams/readable:324:12)
2023-10-24T01:20:49.246044904Z at readableAddChunk (node:internal/streams/readable:297:9)
2023-10-24T01:20:49.246049690Z at Readable.push (node:internal/streams/readable:234:10)
2023-10-24T01:20:49.246054479Z at TCP.onStreamRead (node:internal/stream_base_commons:190:23) {
2023-10-24T01:20:49.246074576Z code: 'ER_BAD_FIELD_ERROR',
2023-10-24T01:20:49.246079244Z errno: 1054,
2023-10-24T01:20:49.246084512Z sqlState: '42S22',
2023-10-24T01:20:49.246089117Z sqlMessage: "Unknown column 'endereco->cidade.latitude' in 'field list'",
2023-10-24T01:20:49.246094334Z sql: 'SELECT `herbarios`.`id`, `herbarios`.`nome`, `herbarios`.`caminho_logotipo`, `herbarios`.`sigla`, `herbarios`.`email`, `endereco`.`id` AS `endereco.id`, `endereco`.`numero` AS `endereco.numero`, `endereco`.`logradouro` AS `endereco.logradouro`, `endereco`.`complemento` AS `endereco.complemento`, `endereco->cidade`.`id` AS `endereco.cidade.id`, `endereco->cidade`.`nome` AS `endereco.cidade.nome`, `endereco->cidade`.`latitude` AS `endereco.cidade.latitude`, `endereco->cidade`.`longitude` AS `endereco.cidade.longitude`, `endereco->cidade->estado`.`id` AS `endereco.cidade.estado.id`, `endereco->cidade->estado`.`nome` AS `endereco.cidade.estado.nome`, `endereco->cidade->estado`.`codigo_telefone` AS `endereco.cidade.estado.codigo_telefone`, `endereco->cidade->estado->paise`.`id` AS `endereco.cidade.estado.paise.id`, `endereco->cidade->estado->paise`.`nome` AS `endereco.cidade.estado.paise.nome`, `endereco->cidade->estado->paise`.`sigla` AS `endereco.cidade.estado.paise.sigla` FROM `herbarios` AS `herbarios` LEFT OUTER JOIN `enderecos` AS `endereco` ON `herbarios`.`endereco_id` = `endereco`.`id` LEFT OUTER JOIN `cidades` AS `endereco->cidade` ON `endereco`.`cidade_id` = `endereco->cidade`.`id` LEFT OUTER JOIN `estados` AS `endereco->cidade->estado` ON `endereco->cidade`.`estado_id` = `endereco->cidade->estado`.`id` LEFT OUTER JOIN `paises` AS `endereco->cidade->estado->paise` ON `endereco->cidade->estado`.`pais_id` = `endereco->cidade->estado->paise`.`id` WHERE `herbarios`.`ativo` = true ORDER BY `herbarios`.`id` DESC LIMIT 0, 20;'

O error está sendo causado provavelmente pela modificação do banco de dados.

O painel hoje exibe esta mensagem somente

Image

Acceptance Criteria

# Given When Then
1 A tela de listagem de herbário é aberta O painel requisitar o endpoint de listagem de herbários Os dados devem ser retornados corretamente como eram antes

[API] Conversão do banco para o formato Darwin Core

Se faz necessário adaptar o script de conversão do banco de dados (em MySQL) para o CSV em formato Darwin Core. Você pode obter mais informações no website oficial do Darwin Core.

User Statement

Como Curador do Herbário

(1)
quero fazer o download do arquivo CSV em formato Darwin Core
para fazer o upload e atualização dos dados no Darwin Core com as informações do meu banco

(2)
quero fazer o download do arquivo CSV nomeado no formato HCF_DarwinCore_2023-01-23.csv
para diferenciar cada download feito por dia

Technical Info

A implementação atual está no arquivo src/controllers/darwincore-controller.js e precisa de alguns ajustes para as modificações que foram feitas no banco de dados e para melhorar o desempenho no momento de seleção dos dados e geração do arquivo.

Seleção dos dados

A seleção dos dados no banco atual é feito com um framework, o Sequelize. A sugestão é utilizar algo mais "baixo nível", como por exemplo o KnexJS escrevendo os comandos SQL e fazendo a seleção diretamente, diminuindo a complexidade do SQL gerado e evitando conversão de registros no banco em objetos complexos (feito pelo ORM).

O script faz hoje a seleção de todos os registros existentes sem limite, o que faz desperdício de recursos do servidor. Modifique para que o processo de seleção e conversão sejam feitos em lotes, com limite para seleção de dados.


Se ajudar no entendimento, esta mesma conversão está implementada baseada no banco de dados antigo (Firebird) e o código está disponível aqui FirebirdToDarwin.

Você pode também utilizar este projeto para validação do resultado, comparando o arquivo gerado pelo código em Java que se baseia no banco original com o arquivo gerado pelo código em NodeJS que se baseia no banco de dados novo.

Acceptance Criteria

# Given When Then
1 O arquivo gerado a partir do código em Java baseado no banco Firebird Comparado com o arquivo gerado pelo script em NodeJS baseado no banco MySQL Os arquivos devem conter os mesmos dados
2 O usuário fez a solicitação para geração do arquivo CSV A conversão e download do arquivo for iniciada O conteúdo deve ser entregue em partes até ser concluído

References

[Python] Registros de subespécies repetidas

Overview

Alguns registros na tabela de "subespécies" estão repetidos, mesmo estando associados à mesma família (e.g. guianensis)

Você deve investigar e validar o porque isso está acontecendo. Use o SQL abaixo para iniciar a investigação:

select
	sub_especies.id sub_especie_id,
	sub_especies.nome sub_especie_nome,
	especies.id especie_id,
	especies.nome especie_nome
from sub_especies
join especies on especies.id = sub_especies.especie_id

[API] Parâmetro de ordenação nas rotas de listagens

Overview

Possibilitar que o painel web faça a ordenação do conteúdo da tabela de forma crescente ou descrescente.

A solução descrita abaixo deve ser aplicada em todas as rotas de listagens. Você pode criar um middleware de forma que facilite o reaproveitamente de código.

User statement

(1)
como usuáro do sistema
quero poder ordenar o conteúdo de uma listagem

Technical info

Nas rotas de listagens, crie um parâmetro chamado order que deve recever como valor o padrão coluna:direção onde coluna será o nome que a API define para cada coluna da tabela, e ordenação pode ser asc e desc que indica a direção para a ordenação do conteúdo.

Exemplo:

  1. Na listagem de famílias, para ordenar pela coluna "família" de forma descrecente a API deve receber o parâmetro de query como order=familia:desc
  2. Na listagem de subfamília, para ordernar pela coluna "subfamília" de forma crescente a API deve receber o parâmetro de query como order=subfamilia:asc
  3. Na listagem de subfamília, para ordernar pela coluna "autor" de forma decrescente a API deve receber o parâmetro de query como order=autor:desc

Acceptance criteria

# Given When Then
1 O endpoint de listagem é requisitado O parâmetro order não é enviado O conteúdo não deve sofrer alteração na ordenação, retornando exatamente o que o banco de dados devolve
2 O endpoint de listagem é requisitado O parâmetro order é enviado com direção asc O conteúdo deve ser ordenado baseado na coluna enviada de forma crescente
3 O endpoint de listagem é requisitado O parâmetro order é enviado com direção desc O conteúdo deve ser ordenado baseado na coluna enviada de forma decrescente
4 O endpoint de listagem é requisitado O parâmetro order é enviado com uma coluna não definida previamente A resposta deve conter um objeto de erro informando que a coluna enviada não é aceita
5 O endpoint de listagem é requisitado O parâmetro order é enviado com uma direção inválida A resposta deve conter um objeto de erro informando que a direção enviada não é aceita

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.