Uma API RESTful para gestão de bibliotecas comunitárias — desenvolvida com Node.js, Express e PostgreSQL.
O projeto nasceu como uma aplicação guiada utilizando SQLite, mas foi evoluído como um desafio pessoal para atingir um nível de robustez de produção. Migrei o banco de dados para PostgreSQL, reestruturei a arquitetura para o padrão MSC (Model/Repository – Service – Controller) e implementei camadas de segurança e tratamento de erros avançadas.
Principais decisões técnicas:
- Migração SQLite → PostgreSQL: Foco em escalabilidade e simulação de ambientes reais de mercado.
- Arquitetura MSC: Separação clara de responsabilidades, facilitando a manutenção e testes unitários.
- Segurança de Ponta: Uso de
bcryptpara hashing de senhas, autenticação viaJWTe tratamento centralizado de erros com a classe customizadaAppError. - Validação de Dados: Implementação rigorosa de esquemas com
Zodpara garantir a integridade dos dados antes de atingirem o banco.
| Camada | Tecnologia |
|---|---|
| Runtime | Node.js + Express |
| Banco | PostgreSQL (Driver pg) |
| Segurança | Bcrypt + JWT |
| Validação | Zod |
| Infra | Docker & Docker Compose |
| Variáveis | Dotenv |
POST /users: Cadastro de usuários com validação de esquema.POST /auth/login: Autenticação e geração de token JWT.GET /users: Listagem de usuários (Rota Protegida / Paginação em progresso).GET /users/:id: Busca detalhada por ID (Rota Protegida).PATCH /users/:id: Atualização parcial de dados (Rota Protegida).DELETE /users/:id: Remoção de conta (Rota Protegida).- Segurança: Garantia de e-mails/usernames únicos e proteção de senhas.
- Erros: Sistema de feedback padronizado para o cliente (400, 401, 404, 409, 500).
Pré-requisitos: Node.js, Docker (opcional, mas recomendado) ou PostgreSQL local.
# Clonar o repositório
git clone https://github.com/seu-usuario/community_library.git
# Entrar na pasta
cd community_library
# Instalar dependências
npm installCreate a .env file in the root:
DB_USER=your_user
DB_HOST=localhost
DB_DATABASE=community_library
DB_PASSWORD=your_password
DB_PORT=5432
JWT_SECRET=your_long_random_secret_hereOption A — Docker (recommended):
docker-compose up -d
npm run devOption B — Local PostgreSQL:
Create a community_library database, configure .env, then npm run dev.
Server runs at http://localhost:3000.
See NEXT_STEPS.md — includes ORM integration and automated testing.