# Melhorias de performance no Atlas
### Melhorias nos metodos chamados no JS
- Melhorar a performance do infoset#stats na rota de visualizacao de outro usuario
- Melhorar a performance do metodo que retorna as tags do user_generated_data no infoset
- Melhorar a performance do metodo que retorna os company-stats do infoset
- Rever como fazer a verificacao da finalziacao da exportacao para permitir que o usuario solicite a validacao de telefones
### Melhorias nas views do infoset
- Remover o kanban da view do infoset, dado que apenas usuarios admins podem visualizar
- Remover as queries feitas diretamente na view ever
- Remover os trechos direcionados diretamente para admins e exibir em uma pagina separada
- Tratar os objetos no controller e nao na view, por exemplo: ```dms.reject { |decisor| decisor['nome'].blank? && decisor['name'].blank? }```
- Remover o loop de flash messages da view e deixar o VueJS lidar com isso
- Armazenar API Token no SessionStorage ao inves de renderizar o token em cada view
- A verificacao da presenca de empresas exportadas nao precisa ser feita dentro da view
- A exibicao dos dados dos administradores, registro da empresa, localizacao, contato, quadro societario, informacoes adicionais e informacoes personalizadas da empresa devera ser carregado com lazy load
- Os status de cada empresa no infoset deveria ser definido no model como enum ou como uma collection separada e nao na view
- Limitar a quantidade de notificacoes exibidas na navbar
### Melhorias nos models
- User:
- Relacoes:
- ProspectingLogs -> precisa ser embeded? N sera embeded
- PhoneValidStatus -> precisa ter relacao? On hold
- CustomPhones -> precisa ter relacao? On hold
- Comments -> precisa ser embeded? N sera embeded
- Sessions -> precisa ser embeded? n precisa ser embeded
- UserGeneratedData -> precisa ser embeded? n precisa ser embeded
- Campos/fields:
- exported_cnpjs/company_gov_id_in_blacklist -> precisa ser outra collection -> on hold
- .*score.* -> precisa ser outra collection -> sera removido
- saved_searches -> legado -> sera removido
- integracoes -> deveriam ser uma collection separada -> sera outra collection
- InfoSet:
- Relacoes:
- Contact -> e necessario? apagar a relacao e os dados
- Campos:
- hidden_columns, visible_columns, visible_column_heads, editable_columns, editable_column_heads, hidden_column_heads -> poderia ser collection separada? -> eliminar as colunas e separar em arquivos yml que o VueJS usara, a la atlas-search
- carlist_options, complete_first_validations_results_cycle, complete_second_validations_results_cycle, total_contacts_with_identities -> remover carlist e verificar se os outros n estao sendo usados, caso n estejam, remover
- total_contacts_with_phones -> nao deveria estar no AutoCallerList? remover
- trash -> se temos trash, por que usamos info_set_deleted_ids? alterar para deleted e remover o infos_set_deleted_ids pq so n faz sentido
- AutoCallerList:
- Relacoes:
- Deveria ter relacao has_many com Phones
- Deveria ter contagem de telefones validos, ativos, etc
- Deveria ter relacao has_many PhoneValidations
- Phone:
- Relacoes:
- Deveria ter relacao belongs_to AutoCallerList
- Deveria ter relacao has_one PhoneValidation
- Deveria manter a relacao para Contact e para Company?
- Campos:
- identity_mongo_id -> procurar wtf -> remover
- PhoneValidation(?):
- Relacoes:
- Deveria ter uma relacao belongs_to Phone
- Deveria ter relacao com Icompany?
- Deveria ter uma relacao belongs_to AutoCallerList
- Campos:
- phone_number -> e necessario dado que ja tem relacao com o Phone?
- last_update -> substituir por TimeStamps
#### Conferir se o whenever esta sendo rodado apos o deploy
#### Calcular as metricas que usamos para o phone-validatios/phone-validated e ver se o counter cache seria o suficiente para isso
#### Add timestamp em tudo
### Ver as views que nao estao sendo usado ou nao e dar feedback disso para o Diogo
- Sera criada uma nova collection CnpjExcluded:
- fields:
- array de cnpjs
- id
- user_id
- excluded_reason
- Na query pegaremos todos os array de cnpjs de acordo com o user_id e usar distinct para evitar informacoes duplicadas
- Ver as opcoes para calcular os stats dos phone-validations:
- map-reduce para retornar estatisticas direto do banco
- usar map-reduce para retornar todos dos Phones e PhoneValidation e depois filtrarmos/contarmos no ruby
- field cache que recalcula as contagens dentro do infoset e e chamado quando toda a exportacao e feita, quando a solicitacao de validacao de telefone e chamada e quando e feita a atualizacao dos status dos phone validations
- Anonymiser o nosso banco para poder passar para os freelas