Repositórios GitHub
Esta seção reúne meus repositórios públicos no GitHub. Aqui você encontra experimentos pessoais, estudos contínuos e projetos open-source que representam minha evolução técnica.
Esta seção reúne meus repositórios públicos no GitHub. Aqui você encontra experimentos pessoais, estudos contínuos e projetos open-source que representam minha evolução técnica.
Linguagens
Tópicos
Uma API RESTful construída com Node.js, Express e TypeScript para gerenciar sua coleção e backlog de videogames. Inclui documentação com Swagger, validação com Joi e arquitetura em camadas.
Linguagens
Tópicos
Uma API RESTful para gerenciar sua coleção e backlog de videogames, construída com Node.js, Express e TypeScript.
Baseada neste repositório incrível de Marcio Zabeu. Criada com amor (e conhecimento).
backlog, jogando, finalizado| Tecnologia | Finalidade |
|---|---|
| Node.js | Ambiente de execução |
| Express 5 | Framework web |
| TypeScript | JavaScript tipado |
| Sequelize | ORM para banco de dados |
| PostgreSQL | Banco de dados relacional |
| Joi | Validação de requisições |
| Swagger | Documentação da API |
| Docker | Containerização do banco |
game-tracker-api/
├── postgresql/
│ └── compose.yaml # Docker Compose para PostgreSQL
├── src/
│ ├── app.ts # Configuração do Express
│ ├── server.ts # Ponto de entrada do servidor
│ ├── config/
│ │ ├── database.ts # Configuração do Sequelize
│ │ ├── env.ts # Variáveis de ambiente
│ │ └── swagger.ts # Configuração do Swagger
│ ├── controllers/
│ │ └── game/ # Controller de jogos
│ ├── docs/
│ │ └── game.docs.yaml # Documentação OpenAPI/Swagger
│ ├── helpers/
│ │ └── apiError.ts # Handler de erros customizado
│ ├── middlewares/
│ │ ├── error.ts # Middleware global de erros
│ │ ├── logger.ts # Middleware de logs
│ │ └── validation/ # Middlewares de validação
│ ├── repositories/
│ │ └── game/ # Camada de acesso a dados
│ ├── routes/
│ │ └── game/ # Definição das rotas de jogos
│ ├── schemas/
│ │ └── game/ # Schemas Joi de validação
│ ├── services/
│ │ └── game/ # Camada de lógica de negócio
│ └── types/
│ └── game/ # Tipos TypeScript
├── package.json
├── tsconfig.json
└── README.md
git clone https://github.com/your-username/game-tracker-api.git
cd game-tracker-api
npm install
cd postgresql
docker compose up -d
Isso iniciará um container PostgreSQL com:
game_tracker_dbadminadmin1235432Crie um arquivo .env na raiz do projeto:
PORT=3000
NODE_ENV=development
# Banco de Dados
DB_HOST=localhost
DB_PORT=5432
DB_NAME=game_tracker_db
DB_USERNAME=admin
DB_PASSWORD=admin123
npm run dev
O servidor iniciará em http://localhost:3000 com hot-reload habilitado.
Abra o navegador e acesse: http://localhost:3000/api-docs
| Método | Endpoint | Descrição |
|---|---|---|
GET | /games | Listar todos os jogos |
POST | /games | Adicionar um novo jogo |
DELETE | /games/:id | Excluir um jogo pelo ID |
GET | /games/search | Buscar jogos com filtros |
PATCH | /games/:id/status | Atualizar status do jogo |
POST /games
Content-Type: application/json
{
"title": "Super Mario World",
"year": 1990,
"platform": "SNES",
"genre": ["Platformer", "Adventure"],
"status": "backlog"
}
GET /games/search?platform=SNES&status=jogando
PATCH /games/:id/status
Content-Type: application/json
{
"status": "finalizado"
}
| Status | Descrição |
|---|---|
backlog | Jogos que você possui mas não começou |
jogando | Jogos que você está jogando atualmente |
finalizado | Jogos que você já terminou |
NESSNESMega DriveGameboyPS1N64| Variável | Descrição | Padrão |
|---|---|---|
PORT | Porta do servidor | 3000 |
NODE_ENV | Modo de ambiente | local |
DB_HOST | Host do PostgreSQL | localhost |
DB_PORT | Porta do PostgreSQL | 5432 |
DB_NAME | Nome do banco de dados | - |
DB_USERNAME | Usuário do banco | - |
DB_PASSWORD | Senha do banco | - |
A documentação interativa está disponível via Swagger UI em /api-docs quando em modo de desenvolvimento.
Você também pode acessar a especificação OpenAPI em /docs.json.
O projeto segue o padrão de arquitetura em camadas:
┌─────────────────────────────────────────────────────┐
│ Rotas │
│ (Define endpoints e middlewares) │
└─────────────────────┬───────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ Controllers │
│ (Lida com requisições e respostas HTTP) │
└─────────────────────┬───────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ Services │
│ (Lógica de negócio e validação) │
└─────────────────────┬───────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ Repositories │
│ (Camada de acesso a dados) │
└─────────────────────────────────────────────────────┘
GET /games/:id)PUT /games/:id)Leonardo Silvatti