{"id":21301200,"url":"https://github.com/adrianomonteiroweb/sequelize-checklist","last_synced_at":"2025-03-15T18:24:32.457Z","repository":{"id":109834741,"uuid":"502025632","full_name":"adrianomonteiroweb/sequelize-checklist","owner":"adrianomonteiroweb","description":"Repositório que é um checklist para uso do Sequelize desde a instalação até a configuração de um Model.","archived":false,"fork":false,"pushed_at":"2022-06-10T12:53:06.000Z","size":8,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-22T08:12:19.091Z","etag":null,"topics":["sequelize","sequelize-cli","sequelize-orm"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adrianomonteiroweb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-10T11:56:46.000Z","updated_at":"2023-06-11T05:45:05.000Z","dependencies_parsed_at":"2023-04-25T01:01:55.451Z","dependency_job_id":null,"html_url":"https://github.com/adrianomonteiroweb/sequelize-checklist","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianomonteiroweb%2Fsequelize-checklist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianomonteiroweb%2Fsequelize-checklist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianomonteiroweb%2Fsequelize-checklist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianomonteiroweb%2Fsequelize-checklist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adrianomonteiroweb","download_url":"https://codeload.github.com/adrianomonteiroweb/sequelize-checklist/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243771870,"owners_count":20345539,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["sequelize","sequelize-cli","sequelize-orm"],"created_at":"2024-11-21T15:44:26.183Z","updated_at":"2025-03-15T18:24:32.428Z","avatar_url":"https://github.com/adrianomonteiroweb.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sequelize Checklist\n\nRepositório que é um checklist para uso do Sequelize desde a instalação até a configuração de um Model.\n\n### Requisitos:\n\nNPM ou Yarn para instalação, inicialização e gerenciamento do sequelize.\n\n### Instalando o sequelize:\n\nComando se você usa NPM:\n\n```bash\nnpm i sequelize\n```\n\n```bash\nnpm i sequelize-cli -D\n```\n\nComando se você usa Yarn:\n\n```bash\nyarn add sequelize\n```\n\n```bash\nyarn add sequelize-cli -D\n```\n\nInstale também o módulo referente ao banco que for utilizar junto ao sequelize. Como por exemplo pg para postgres ou mysql2 para mysql. Para isso o comando no caso de uso do postgres seria:\n\n```bash\nnpm i pg\n```\n\n### Iniciando o sequelize:\n\nPara iniciar o sequelize, vamos usar comandos de execução que se você usa NPM será nxp, e se você usar Yarn, será o próprio yarn.\n\n```bash\nnpx sequelize init\n```\n\nou\n\n```bash\nyarn sequelize init\n```\n\nNesse ponto é possível reorganizar as pastas como queira. Após isso, será preciso criar o arquivo .sequelizerc na raiz de seu projeto para definir o caminho correto das pastas.\n\n### Resolvendo caminho de pastas.\n\nUse o módulo path com o método resolve para informar ao sequelize as disposição das pastas em seu projeto. Neste repositório tem a pasta src e o arquivo .sequelizerc para exemplificar melhor.\n\n```js\nconst path = require(\"path\");\n\nmodule.exports = {\n  config: path.resolve(\"src\", \"config\", \"database.js\"),\n  \"models-path\": path.resolve(\"src\", \"app\", \"models\"),\n  \"seeders-path\": path.resolve(\"src\", \"database\", \"seeders\"),\n  \"migrations-path\": path.resolve(\"src\", \"database\", \"migrations\"),\n};\n```\n\n### Configurações:\n\nDentro da pasta \"config\", o arquivo em formado .json estará por padrão com 3 ambientes a ser configurados. Mas vamos iniciar apenas com 1 ambiente e no formato .js já que vamos precisar importar variáveis de ambiente para deixar nossa configuração mais dinâmica.\n\nAtenção para informar corretamente os dados de seu banco, como host, user, password, database e o dialeto, que no exemplo abaixo é postgres.\n\n```js\nmodule.exports = {\n  host: \"127.0.0.1\",\n  username: \"myuser\",\n  password: \"mypassword\",\n  database: \"mydatabase\",\n  dialect: \"postgres\",\n  operatorsAliases: false,\n  logging: false,\n  define: {\n    timestamps: true,\n    unserscored: true,\n    unserscoredAll: true,\n  },\n};\n```\n\n### Criando uma migration.\n\nQue é um controle de versão no nosso banco de dados referente a dados específicos, como no exemplo a seguir, \"users\". Evitando problemas de gerenciamento de dados desatualizados pelo uso de mais de 1 desenvolvedor.\n\n```bash\nnpx sequelize migration:create --name=users-create\n```\n\nou\n\n```bash\nyarn sequelize migration:create --name=users-create\n```\n\nDepois de criada, vamos configurar:\n\n```js\n\"use strict\";\n\nmodule.exports = {\n  async up(queryInterface, Sequelize) {\n    // cria a tabela com o nome \"users\"\n    return queryInterface.createTable(\"users\", {\n      id: {\n        type: Sequelize.INTEGER, // tipo\n        primaryKey: true, // chave primária\n        autoIncrement: true, // auto-incrementável\n        allowNull: false, // campo obrigatório\n      },\n      name: {\n        type: Sequelize.STRING,\n        allowNull: false,\n      },\n      email: {\n        type: Sequelize.STRING,\n        unique: true, // Valor não pode se repetir\n        allowNull: false,\n      },\n      password_hash: {\n        // senha incriptada\n        type: Sequelize.STRING,\n        allowNull: false,\n      },\n      created_at: {\n        // data de criação\n        type: Sequelize.DATE,\n        allowNull: false,\n      },\n      updated_at: {\n        // data de atualização\n        type: Sequelize.DATE,\n        allowNull: false,\n      },\n    });\n  },\n\n  // dropa (deleta) a tabela\n  async down(queryInterface, Sequelize) {\n    queryInterface.dropTable(\"users\");\n  },\n};\n```\n\nAgora podemos executar a tabela com o comando:\n\n```bash\nnpx sequelize db:migrate\n```\n\nou\n\n```bash\nyarn sequelize db:migrate\n```\n\n### Crie o model User.js\n\nNa pasta \"models\", crie o arquivo \"User.js\" e crie a função de definição de tipos de dados referente a tabela de usuário.\n\n```js\nmodule.exports = (sequelize, DataTypes) =\u003e {\n  const User = sequelize.define(\"User\", {\n    name: DataTypes.STRING,\n    email: DataTypes.STRING,\n    password_hash: DataTypes.STRING,\n  });\n\n  return User;\n};\n```\n\n# ATENÇãO!!!\n\n### Vamos configurar o arquivo index de configuração na pasta models.\n\nComo mudamos o arquivo de configuração para .js para receber variáveis de ambiente posteriormente, vamos precisar fazer algumas alterações no arquivo index da pasta model. Isso porque o tal arquivo index, serve para fazer com que os models que criarmos dentro da pasta models, fiquem disponíveis para o sequelize.\n\n#### Podemos remover a linha 7:\n\n```js\nconst env = process.env.NODE_ENV || \"development\";\n```\n\n#### Na nova linha 7, remova o dirname, o array de env e aponte agora o caminho para o arquivo na pasta config:\n\nAntes:\n\n```js\nconst config = require(__dirname + \"/../config/config.json\")[env];\n```\n\nDepois:\n\n```js\nconst config = require(\"../../config/database\");\n```\n\n#### No código da linha 10 à 20. Vamos remover a condição IF deixando apenas o resultado de condição verdadeira armazenado em uma const. Além disso, vamos passar ao sequelize os parâmetros de forma diferente.\n\nAntes:\n\n```js\nlet sequelize;\nif (config.use_env_variable) {\n  sequelize = new Sequelize(process.env[config.use_env_variable], config);\n} else {\n  sequelize = new Sequelize(\n    config.database,\n    config.username,\n    config.password,\n    config\n  );\n}\n```\n\nDepois:\n\n```js\nconst sequelize = new Sequelize(\n  config.database,\n  config.username,\n  config.password,\n  config\n);\n```\n\n### Import o model User e é hora de testar, como por exemplo em alguma rota:\n\n```js\nconst routes = require(\"express\").Router();\nconst { User } = require(\"./app/models\");\n\nUser.create({\n  name: \"Adriano\",\n  email: \"adrianomonteirodev@gmail.com\",\n  password_hash: \"12345678910\",\n});\n\nmodule.exports = routes;\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadrianomonteiroweb%2Fsequelize-checklist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadrianomonteiroweb%2Fsequelize-checklist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadrianomonteiroweb%2Fsequelize-checklist/lists"}