Executando verificação de segurança...
1

Pitch: node-mysql-migrate

My First Package | NODE-MYSQL-MIGRATE 🚀

Olá mundo!
Neste mês surgiu uma necessidade interna na minha empresa.
Precisavamos de uma solução para Migrations dedicada ao banco de dados MySql. Pesquisei algumas bibliotecas, mas não encontrei nada da forma que eu precisava... com esse problema em mãos pensei "porque não criar algo e divulgar no TabNews para que mais DEVs possam me ajudar?".

Tem muita coisa para ser feita ainda, a biblioteca já realiza Criação|Alteração de Tabelas|Geração de Foreign Keys... mas precisa de muitooo mais! Quem quiser ajudar na construção desse projeto será muito bem-vindo, vamos construir algo top! 😍

Link do projeto no Git: https://github.com/tiagomol1/node-mysql-migrate
Link NPM: https://www.npmjs.com/package/node-mysql-migrate

TMJ!

Carregando publicação patrocinada...
1
1

Salve @rnpr4541!
Migration é um conceito de abstração para modelagem de banco de dados.
Pra facilitar a explicação vou comparar com o Github, as Migrations permitem que você consiga facilmente mudar versões do banco de dados, além de armazenar abstrações de toda estrutura, assim como o Github fica mais facil para compartilhar a configuração de estrutura do seu banco de dados com outros Devs, etc.

Espero ter conseguido te ajudar! 👍️🤝

1

Olá Tiago,

Ajudou sim.
Pelo que percebi estás a usar não só para migrar, mas também como controle de versões do schema/database ?
Sou administrador de bancos de dados, Oracle e Mysql e existe uma ferramenta chamada liquibase que faz controle de versões de schema. Não sei se conheces, nem sei se faz sentido para o que estás a tentar fazer.

Abraço,
Rui Rodrigues

1

Sensacional o projeto Tiago! Parabéns por disponibilizar algo assim open source 🤝

Em paralelo, tive a mesma curiosidade do guilfer sobre qual a característica do seu projeto que fez necessário criar um novo módulo, pois essa informação é muito valiosa para aprendermos sobre contextos encontrados na vida real 👍

E outro ponto que me chamou atenção foi esse trecho de código:

   import express from 'express'
   import MigrationDataSource from './database/migration'
   
   MigrationDataSource
   
   const app = express()
   ...
   app.listen(3333, => console.log('Server is running on port: 3333'))

O MigrationDataSource deve ser declarado daquela forma mesmo? Ou deveria ser executado com MigrationDataSource()?

E uma sugestão que daria na interface é poder definir uma pasta onde estão as migrations, ao invés de precisar importar e declarar uma a uma 🤝

Ps: atualizei o título para colocar Pitch na frente, pois você tem vículo direto com o projeto 🤝

1

Salve @filipedeschamps e @guilfer! Primeiramente obrigado pelo interesse no projeto 😍🤝

Porque quis montar algo novo:

  • Não encontrei muitas bibliotecas dedicadas ao banco de dados MySql para apenas rodar migrations (embora tenha diversos ORMs que fazem isso, não há muita coisa dedicada e exclusiva ao banco de dados mysql). Uma bibliote que vi e achei massa foi essa "https://www.npmjs.com/package/mysql-migrations", mas o conceito e forma de uso é diferente da proposta na biblioteca que criei. (Obs.: o projeto node-mysql-migrate esta no começo, fiz em pouco tempo para usar em alguns projetos internos que minha empresa precisava)
  • Hoje temos disponiveis diversos ORMs mas para alguns projetos em especificos da minha empresa não queriamos usar um ORM, precisavamos única e exclusivamente rodar migrations.
  • Me insipirei muito no projeto da TabNews ao ver o uso do node-pg-migrate, quis tentar criar algo semelhante só que dedicado para o MySql.
  • Outra coisa que me preocupou ao recorrer a um ORM foi ao ver o numero de bugs abertos... um ORM famosos como o TypeOrm possui aberto hoje cerca de 1.6k, sendo 900 só de bugs. Claro que não são bugs direcionados ao banco de dados Mysql, mas isso fez eu pensar mais a respeito do uso dessas bibliotecas (obs.: Embora isso, gosto muito do TypeOrm inclusive já usei em outros projetos).

Sobre a forma de uso:
É dessa forma mesmo @filipedeschamps, precisa apenas chamar a MigrationDataSource no inicio do projeto que ela se encarrega do restante. Mas isso que você me perguntou levantou uma dúvida aqui. Será que isso não irá gerar dúvida em outras pessoas? 🤔 (posso mudar, o que você acha melhor?)

Sobre a sugestão
E uma sugestão que daria na interface é poder definir uma pasta onde estão as migrations, ao invés de precisar importar e declarar uma a uma 🤝
Isso é algo que estou querendo e com certeza vou adicionar ao projeto 😍

1

Tiago, sensacional sua explicação 🤝

E agora fiquei super curioso sobre como funciona apenas declarar a classe, sem precisar instanciar ela para rodar o construtor. Eu vi que você já dá um run nas migrações no construtor, mas não sabia que ele já conseguia ser executado só pelo fato de declarar a classe ali daquela forma.

Então de qualquer forma, sugiro mudar para isso não virar um ponto de questionamento/atrito por quem está querendo aprender a usar o módulo 👍

1

Boa! Ficou bem legal o projeto!
Você pode contar melhor quais foram as alternativas que você tentou utilizar e por quê não rolou com elas? Inclusive talvez seja uma informação legal pra colocar no readme pra chamar a atenção.

2

Salve @filipedeschamps e @guilfer! Primeiramente obrigado pelo interesse no projeto 😍🤝

Porque quis montar algo novo:

  • Não encontrei muitas bibliotecas dedicadas ao banco de dados MySql para apenas rodar migrations (embora tenha diversos ORMs que fazem isso, não há muita coisa dedicada e exclusiva ao banco de dados mysql). Uma bibliote que vi e achei massa foi essa "https://www.npmjs.com/package/mysql-migrations", mas o conceito e forma de uso é diferente da proposta na biblioteca que criei. (Obs.: o projeto node-mysql-migrate esta no começo, fiz em pouco tempo para usar em alguns projetos internos que minha empresa precisava)
  • Hoje temos disponiveis diversos ORMs mas para alguns projetos em especificos da minha empresa não queriamos usar um ORM, precisavamos única e exclusivamente rodar migrations.
  • Me insipirei muito no projeto da TabNews ao ver o uso do node-pg-migrate, quis tentar criar algo semelhante só que dedicado para o MySql.
  • Outra coisa que me preocupou ao recorrer a um ORM foi ao ver o numero de bugs abertos... um ORM famosos como o TypeOrm possui aberto hoje cerca de 1.6k, sendo 900 só de bugs. Claro que não são bugs direcionados ao banco de dados Mysql, mas isso fez eu pensar mais a respeito do uso dessas bibliotecas (obs.: Embora isso, gosto muito do TypeOrm inclusive já usei em outros projetos).

Sobre a forma de uso:
É dessa forma mesmo @filipedeschamps, precisa apenas chamar a MigrationDataSource no inicio do projeto que ela se encarrega do restante. Mas isso que você me perguntou levantou uma dúvida aqui. Será que isso não irá gerar dúvida em outras pessoas? 🤔 (posso mudar, o que você acha melhor?)

Sobre a sugestão
E uma sugestão que daria na interface é poder definir uma pasta onde estão as migrations, ao invés de precisar importar e declarar uma a uma 🤝
Isso é algo que estou querendo e com certeza vou adicionar ao projeto