{"id":28229151,"url":"https://github.com/fabiosperotto/api-players-express","last_synced_at":"2026-05-07T18:12:36.598Z","repository":{"id":191678220,"uuid":"685161363","full_name":"fabiosperotto/api-players-express","owner":"fabiosperotto","description":"Projeto de aprendizado de programação de API RESTful com Nodejs + Express + Ajv + Sequelize","archived":false,"fork":false,"pushed_at":"2024-05-29T18:16:19.000Z","size":44,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-08T05:00:53.144Z","etag":null,"topics":["ajv-validation","educational-project","express","nodejs","rest-api","restful-api","sequelize","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":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fabiosperotto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2023-08-30T16:36:48.000Z","updated_at":"2024-05-29T18:16:22.000Z","dependencies_parsed_at":"2025-06-10T14:40:13.887Z","dependency_job_id":null,"html_url":"https://github.com/fabiosperotto/api-players-express","commit_stats":null,"previous_names":["fabiosperotto/api-players-express"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fabiosperotto/api-players-express","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabiosperotto%2Fapi-players-express","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabiosperotto%2Fapi-players-express/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabiosperotto%2Fapi-players-express/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabiosperotto%2Fapi-players-express/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fabiosperotto","download_url":"https://codeload.github.com/fabiosperotto/api-players-express/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabiosperotto%2Fapi-players-express/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32749782,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["ajv-validation","educational-project","express","nodejs","rest-api","restful-api","sequelize","sequelize-orm"],"created_at":"2025-05-18T15:13:41.579Z","updated_at":"2026-05-07T18:12:36.568Z","avatar_url":"https://github.com/fabiosperotto.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Game-API - Pack de Aprendizado\n\nPacote de programação para disciplinas de desenvolvimento web back-end, utilizando Javascript com Nodejs + [Express](https://expressjs.com/). O Objetivo é servir de exemplo para a elaboração de uma API para comunicar dados em JSON a respeito de uma modelagem. É uma API RESTful com validações de schemas JSON ([Ajv](https://ajv.js.org/)) e para autenticação utiliza JWT Token ([jsownwebtoken](https://github.com/auth0/node-jsonwebtoken)). Na persistência de dados, se utiliza o ORM [Sequelize](https://sequelize.org/) com banco de dados em MySQL.\n\nEste projeto faz parte de uma série de aprendizado em APIs. Nesta mesma série, você pode acessar o mesmo projeto implementado com [PHP e Lumen](https://github.com/fabiosperotto/pratica-api-rest).\n\n## Compatibilidade\n\n- Nodejs 18.16.x;\n- npm 9.5.x;\n- Express 4.18.2\n- MySQL 8.0;\n- Ajv 8.12.0;\n- cors 2.8.5;\n- jsonwebtoken 9.0.1;\n- mysql2 3.6.0;\n- sequelize 3.6.0.\n\n### Docência\n\nSe você é docente da área, pode entrar em contato para obter slides e dicas sobre o desenvolvimento de aulas com este projeto.\n\n## Recursos\n\n- Utilização do framework Express como base;\n- Validação de documentos JSON com Ajv;\n- ORM Sequelize para criação/alteração de banco de dados relacionais, incluindo relacionamento entre tabelas.\n- Aplicações de configurações sobre [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) e [Bearer Tokens](https://oauth.net/2/bearer-tokens/);\n\n## Modelagem de Referência\n\nEste projeto faz referência a uma modelagem hipotética de um game, da relação entre um jogador e seus equipamentos.\n\n![Imagem da Modelagem inicial do sistema](/modelagem/modelagem-img.png)\n\n## Pré-requisitos:\n\n1. Ambiente local de desenvolvimento:\n\n- Se Windows: instalações [node e npm](https://treehouse.github.io/installation-guides/windows/node-windows.html) e [MySQL](https://dev.mysql.com/downloads/installer/);\n- Se Linux: instalações [node e npm](https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-22-04) e [MySQL](https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-22-04);\n\n2. Para acessar o banco de dados, caso não queira manipular o BD via linha de comando, pode utilizar um ou mais softwares clientes, como [MySQL Workbench](https://www.mysql.com/products/workbench/) ou [DBeaver](https://dbeaver.io/).\n\n3. Para usuários Windows recomenda-se sempre utilizar o [Git Bash for Windows](https://gitforwindows.org/) a fim de executar comandos similares ao estilo linux das aulas. Pode usar o terminal do [Visual Studio Code](https://code.visualstudio.com/).\n\n## Organização do Projeto\n\nO projeto segue uma estrutura em MVC com arquivos individuais de rotas e validadores JSON:\n\n- /app\n  - /commons: helpers reutilizáveis pela aplicação;\n  - /controllers: os Controllers da aplicação;\n  - /middlewares: reúne todos os middlewares da aplicação;\n  - /models: reúne as Models e o inicializador index para o ORM;\n  - /routes: arquivos de rotas da aplicação;\n  - /schemas: os esquemas JSON utilizados para validações na aplicação;\n- modelagem: documentações sobre o banco de dados.\n- app.js: componente de inicialização do projeto.\n- config.js: reúne propriedades configuráveis globais da aplicação.\n\n## Instalação e Configuração\n\n1. Fazer o download/fork/cópia deste repositório.\n2. Instalar via npm o projeto:\n\n```console\ndev@pc:~$ cp .env.example .env\ndev@pc:~$ npm install\n```\n\n3. Verifique se o primeiro comando resultou na cópia correta do .env.example para .env. Em seguida preencha corretamente todas as variáveis de ambiente do arquivo .env.\n\n4. Para executar o projeto, acesse o diretório da aplicação e execute um dos comandos abaixo:\n\n```console\ndev@pc:~$ npm run dev\n#ou\ndev@pc:~$ npx nodemon\n```\n\n## Documentação\n\n### Validação de dados JSON com Ajv\n\nAo receber documentos JSON do cliente, este projeto utiliza a biblioteca Ajv para avaliar se na estrutura do documentos os dados encontram-se adequados conforme a necessidade do back-end. Para criar um schema de validação verifique exemplo em app/schemas. Poderá especificar regras de campos obrigatórios, tipos de dados que cada campo deve ser, dentre outros.\n\nPara utilizar o validador automatizado, no controller é necessário realizar a chamada do objeto do Ajv, informar o objeto de schema de validação (item anterior). Depois é necessário apenas informar o conjunto de dados recebido (pode ser o corpo da requisição) ao validador para que o mesmo avalie toda a estrutura. Um exemplo pode ser consultado no método create em app/controllers/JogadorController.\n\n### Banco de Dados\n\nEste projeto utiliza o ORM Sequelize, onde por meio do arquivo app/models/conexao.js é realizada a conexão com o banco de dados. A parametrização do Sequelize consta em config.js.\n\nCada model do projeto (app/models) é uma classe com dados privados (comum em JS). Entretanto, na mesma classe, a Model do Seuqelize para cada entidade é inicializada. A ideia é que métodos comuns do ORM como create, update, dentre outros, sejam acopladas a classe comum da model. Isto facilita caso futuramente seja necessário trocar o Sequelize por outro framework. Cada model téncicamente exporta a sua classe e a model sequelize conectada, respectivamente.\n\nEm app/models/index.js é realizada a importação das models e a sincronização com banco de dados. A sincronização verifica se existe a tabela da model criada no BD e caso não existir, cria as tabelas necessárias. Em app/models/relations.js são implementados e configurados os relacionamentos entre as models (o que pode ser também feito dentro de cada classe), a partir destas configurações, quando o Sequelize for criar as tabelas, os relacionamentos também serão gerados.\n\n### Autenticação\n\nPara a utilização da API é necessário ter um token de acesso que deverá ser enviado pelo lado do cliente, via cabeçalho da requisição, para esta API autorizar o consumo de dados. No cabeçalho deve ser especificado Bearer token, onde token é gerado para um cliente conhecido. Um middleware em app/middlewares tem por responsabilidade ser o intermediário, avaliando se existe o token na requisição e se o mesmo é válido.\n\nO projeto segue o padrão de implementação de tokens via JWT Token. É necessário que um cliente que deseja utilizar a API faça o cadastro para se tornar um cliente conhecido e autorizado. Ao fazer o cadastro o token é gerado e retornado ao cliente. Por padrão cada token tem um tempo de validade definido em config.js (jwt.expiration).\n\nTambém existe a implementação de login para os clientes, ao enviar e-mail e senha corretos para esta API, a mesma verificará as credenciais e irá gerar um token. No final desta mesma requisição o cliente deverá receber um token de acesso para utilizar normalmente a API.\n\n## Documentações Extermas\n\n[Express](https://expressjs.com/pt-br/)\n\n[Sequelize ORM](https://sequelize.org/docs/v6/getting-started/)\n\n## Dependências\n\n[npm](https://www.npmjs.com/)\n\n## Contribuindo com o projeto\n\nSerão aceitas atualizações de pacotes, correções de bug e melhorias didáticas. Novas funcionalidades podem serem debatidas e adicionadas ao projeto se verificado necessidade do desenvolvimento de back-end de um jogo completo.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabiosperotto%2Fapi-players-express","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffabiosperotto%2Fapi-players-express","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabiosperotto%2Fapi-players-express/lists"}