API REST de gerenciamento de pousada, com criação, atualização, exclusão e controle de quartos, reservas e usuários, desenvolvida com Node.js, Express, MySQL e tratamento de erros robusto.
Este projeto foi criado com o objetivo de estudar e aplicar boas práticas de desenvolvimento de APIs REST, abordando conceitos como:
- Organização em camadas (controllers, services, models)
- Tratamento e manipulação de erros customizados
- Validação de dados com middlewares
- Padrões de resposta consistentes
- Segurança com autenticação JWT e validação de entrada
- Documentação clara da API com Swagger
O projeto tem foco educacional e de portfólio, demonstrando uma arquitetura bem estruturada e escalável para sistemas de gestão de pousadas.
- Node.js
- Express
- MySQL
- Sequelize (ORM)
- JWT (JSON Web Tokens)
- bcrypt (hashing de senhas)
- dotenv (variáveis de ambiente)
- Nodemon (desenvolvimento)
- Swagger UI (documentação)
- Git
├── app.js # Arquivo principal da aplicação
├── package.json # Dependências do projeto
├── readme.md # Documentação do projeto
├── config/
│ └── config.js # Configurações do banco de dados
├── controller/ # Camada responsável pelas requisições HTTP
│ ├── adminController.js
│ ├── authController.js
│ ├── registerController.js
│ ├── reservationController.js
│ └── roomController.js
├── docs/ # Documentação Swagger
│ ├── swagger.admin.yml
│ └── swagger.user.yml
├── errors/
│ └── appError.js # Classe base de erros
├── middlewares/ # Validações e tratamento de erros
│ ├── authMiddleware.js
│ ├── ensureAdminMiddleware.js
│ ├── ensureAuthMiddleware.js
│ ├── errorMiddleware.js
│ ├── rateLimit.js
│ ├── registerMiddleware.js
│ ├── reservationMiddleware.js
│ └── roomMiddleware.js
├── migrations/ # Migrações do banco de dados
├── models/ # Definição das entidades e conexão do BD
│ ├── index.js
│ ├── reservationModel.js
│ ├── roomModel.js
│ └── useModel.js
├── routes/ # Definição das rotas da API
│ ├── adminRouter.js
│ └── userRouter.js
├── seeders/ # Seeds para popular o banco
└── services/ # Regras de negócio da aplicação
├── adminService.js
├── authService.js
├── registerService.js
├── reservationService.js
└── roomService.jsA estrutura segue o princípio de separação de responsabilidades, facilitando manutenção, testes e evolução do sistema.
{
"bcrypt": "^6.0.0",
"dotenv": "^17.3.1",
"express": "^5.2.1",
"express-rate-limit": "^8.2.1",
"jsonwebtoken": "^9.0.3",
"mysql2": "^3.17.2",
"sequelize": "^6.37.7",
"swagger-ui-express": "^5.0.1",
"yamljs": "^0.3.0"
}{
"nodemon": "^3.1.11",
"sequelize-cli": "^6.6.5"
}git clone https://github.com/seu-usuario/pousada-api.git
cd pousada-apinpm installCrie um arquivo .env na raiz do projeto:
PORT=3000
DB_HOST=localhost
DB_USER=usuario
DB_PASSWORD=senha
DB_NAME=pousada_db
DB_PORT=3306
NODE_ENV=development
JWT_SECRET=sua_chave_secreta_jwtExecute as migrações e seeds:
npx sequelize-cli db:migrate
npx sequelize-cli db:seed:allnpm run devhttp://localhost:3000Documentação Swagger em: http://localhost:3000/admin-docs e http://localhost:3000/docs
- ✅ Autenticação de usuários (login/registro)
- ✅ Gerenciamento de quartos (CRUD)
- ✅ Gerenciamento de reservas (CRUD)
- ✅ Controle de acesso admin
- ✅ Validação robusta de entrada
- ✅ Tratamento centralizado de erros
- ✅ Limitação de taxa de requisições
- ✅ Documentação interativa com Swagger
| Método | Rota | Descrição |
|---|---|---|
| POST | /login |
Login de usuário |
| POST | /register |
Registro de novo usuário |
| Método | Rota | Descrição |
|---|---|---|
| GET | /rooms |
Listar quartos ativos |
| Método | Rota | Descrição |
|---|---|---|
| GET | /admin/rooms |
Listar todos os quartos |
| POST | /admin/rooms |
Criar novo quarto |
| PATCH | /admin/rooms/:id |
Atualizar quarto |
| DELETE | /admin/rooms/:id |
Desativar quarto |
| Método | Rota | Descrição |
|---|---|---|
| POST | /reservations |
Criar nova reserva |
| GET | /reservations/me |
Listar minhas reservas |
| Método | Rota | Descrição |
|---|---|---|
| GET | /admin/reservations |
Listar todas as reservas |
| PATCH | /admin/reservations/:id |
Cancelar reserva |
| Método | Rota | Descrição |
|---|---|---|
| GET | /admin/users |
Listar todos os usuários |
POST /reservations
Content-Type: application/json
Authorization: Bearer <token>
{
"roomId": 1,
"checkIn": "2026-02-20",
"checkOut": "2026-02-22",
"guests": 2
}{
"id": 1,
"roomId": 1,
"userId": 1,
"checkIn": "2026-02-20T00:00:00.000Z",
"checkOut": "2026-02-22T00:00:00.000Z",
"guests": 2,
"status": "confirmed",
"createdAt": "2026-02-19T10:30:00Z",
"updatedAt": "2026-02-19T10:30:00Z"
}A aplicação utiliza um sistema centralizado de tratamento de erros, retornando respostas consistentes:
{
"erro": "Quarto não encontrado",
"status": 404
}- Implementação de testes automatizados com Jest
- Sistema de notificações por email
- Paginação e filtros avançados
- Integração com gateways de pagamento
- Deploy em produção
O projeto foi desenvolvido com foco em clareza de código, organização em camadas e tratamento robusto de erros, demonstrando boas práticas de desenvolvimento backend e estrutura escalável para projetos futuros.