cuducos / minha-receita

🏢 Sua API web para consulta de informações do CNPJ da Receita Federal
https://minhareceita.org
MIT License
1.32k stars 132 forks source link

Verifica se `psql` existe antes de iniciar o processamento #112

Closed athossampayo closed 2 years ago

athossampayo commented 2 years ago

Tentei deixar o mais simples possível.

Encontrei duas abordagens para a checagem, usando o exec.LookPath ou o exec.Command, mas com o Command precisaria abrir um shell para conseguir rodar comandos nativos para checar se existe o psql (rodaria o command -v psql), então achei mais simples usar o LookPath.

Estou aberto para corrigir algo. :smile:

athossampayo commented 2 years ago

Concordo que não deveria estar no módulo cmd, vou modificar! Pensando bem, agora acho que deveria estar no módulo postgres, já que caso seja implementada uma solução com outro db, não seria necessária a verificação. O que acha?

cuducos commented 2 years ago

Pensando bem, agora acho que deveria esatr no módulo postgres

Perfeito! É o CreateCompanies de db/postgres.go (dentro do módulo db) que tem essa dependência, verdade!

athossampayo commented 2 years ago

@cuducos tomei por opção manter a validação no cmd porem a partir da variável db, deixando fácil a adaptação para quando for incluir a opção de utilizar outro banco. Porém ainda estou um pouco viciado com o paradigma OOP, acha que faz sentido? Ou acha que mudo o local da checagem?

Vale comentar que não quis deixar a validação no CreateCompanies pois o problema é o erro acontecer após um tempo de espera e de processamento gastos, já que o transform rodará o createJSONRecordsTask primeiro.

cuducos commented 2 years ago

Tá lindo. Podes só adicionar a documentação, já que é uma função pública?

// AssertPostgresCLIExists does this this and that etc.
func AssertPostgresCLIExists() error {
cuducos commented 2 years ago

(ah, eu sei que o nome dessa função é bem auto-descritivo, mas isso é um padrão em proejtos Go, pelo o que eu entendi… só fiquei curioso agora pq, salvo engano, golint pegava isso e staticcheck não pegou… sabe de algo @danielfireman?)

athossampayo commented 2 years ago

@cuducos feito!

Não conhecia o padrão, então ficou de aprendizado. Realmente rodei o staticcheck localmente antes e não pegou, o que já teria corrigido de início.

Edit:

Caso interessa, encontrei a discussão sobre a checagem com o staticcheck: https://github.com/dominikh/go-tools/issues/1044