ModeraCompra
March 23, 2021 · View on GitHub
Backend da aplicação ModeraCompra. Projeto desenvolvido na disciplina de Linguagem de Programação IV. Faculdade de Tecnologia Termomcânica.
Local Setup
Para ambos os casos abaixo, por padrão o banco postgres cria por padrão o usuário (superuser) postgres.
Importante: para ambos os casos, após a instalação do postgres e do SGBD de sua escolha, crie um banco chamado 'moderacompra-dev`.
Postgres
Instalação via container
-
Instalar o Docker em sua maquina: https://balta.io/blog/docker-instalacao-configuracao-e-primeiros-passos
-
No terminal, faça o download da imagem do postgres:
$ docker pull postgres
- Verifique se está tudo certo:
$ docker images
>>>
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres latest 9907cacf0c01 2 weeks ago 314MB
- Execute a criação do container, alterando a senha
12345para a senha de sua preferência:
$ docker run -d --name postgres -e POSTGRES_PASSWORD=12345 -p 5432:5432 postgres
- Verifique se o container está sendo executado:
$ docker ps
>>>
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dfa570d6e843 postgres "docker-entrypoint.s…" 27 hours ago Up 3 seconds 0.0.0.0:5432->5432/tcp postgres
Pronto, agora você tem uma instancia do postgres rodando na sua máquina, podendo acessar via PgAdmin, ou DBeaver, ou Postbird, ou qualquer SGBD de sua escolha.
Essa intância é acessada pelo localhost (ou 127.0.0.1) na porta 5432.
Instalação direto na máquina
- Instalalação no windows: https://www.devmedia.com.br/instalando-postgresql/23364
- Instalação no linux: https://www.edivaldobrito.com.br/como-instalar-o-postgresql-no-ubuntu-20-04-lts-e-derivados/
Variáveis Ambientes
O backend utiliza variáveis ambientes para que possamos setar usuario, senha e host do banco de dados (entre outras informações);
No arquivo .env.dev, substituir cada parametro de acordo com os dados utilizados na criação do seu banco local.
Migrations
Para toda alteração no banco de dados, precisamos trabalhar em cima de um arquivo de migration, que fará o papel de descrever os comandos feitos no banco, tais como:
CREATE TABLE
ALTER TABLE
DROP TABLE
Todos os comandos possívels podem ser vistos nesse link: https://sequelize.org/master/class/lib/dialects/abstract/query-interface.js~QueryInterface.html.
Para trabalhar com migrations, usaremos a CLI do Sequelize.
Trabalhando com migrations
Toda vez que precisarmos criar uma tabela, alterar uma tabela, dropar uma tabela, alterar uma coluna, adicionar uma FK, etc, precisamos trabalhar com migrations, para que todo mundo esteja com seu ambiente de desenvolvimento igual.
-
Crie o seu model dentro de
src/database/postgres/modelscom todos os atributos e metodos que desejar, não esquecendo de configurar o.inite.addHook(caso precise de algum hook) -
Crie uma nova migration com o comando abaixo, substituindo
--name create-userspor um nome de migration que faça mais sentido para o que você estiver fazendo:
$ yarn migration:create --name create-users
O sequelize cli irá criar um arquivo javascript de migration dentro de src/database/postgres/migrations conforme abaixo:
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
/**
* Add altering commands here.
*
* Example:
* await queryInterface.createTable('users', { id: Sequelize.INTEGER });
*/
},
down: async (queryInterface, Sequelize) => {
/**
* Add reverting commands here.
*
* Example:
* await queryInterface.dropTable('users');
*/
},
};
- Altere o método
upcom o que você deseja alterar no banco, e odowncom a operação para reverter o que será feito no up (isso é utilizado caso você queira fazer um rollback das suas alterações):
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
return queryInterface.createTable("users", {
id: {
type: Sequelize.STRING,
primaryKey: true,
unique: true,
},
name: {
allowNull: false,
type: Sequelize.STRING,
},
email: {
allowNull: false,
unique: true,
type: Sequelize.STRING,
},
password_hash: {
allowNull: false,
type: Sequelize.STRING,
},
created_at: {
allowNull: false,
type: Sequelize.DATE,
},
updated_at: {
allowNull: false,
type: Sequelize.DATE,
},
});
},
down: async (queryInterface, Sequelize) => {
return queryInterface.dropTable("users");
},
};
Veja a documentação do queryInterface para obter mais detalhes sobre o que pode ser feito.
- Após concluir o arquivo de migration, rode a migration no banco utilizando o comando abaixo:
$ yarn migration:run
- Caso seja necessário reverter a migração anterior para arrumar alguma coisa, execute o comando abaixo:
$ yarn migration:undo