Uma API REST robusta para e-commerce construída com Node.js, TypeScript, Express.js e PostgreSQL
- Sobre o Projecto
- Tecnologias
- Documentações
- Estrutura do Projecto
- Instalação e Configuração
- Scripts Disponíveis
- Variáveis de Ambiente
- Contribuição
- Licença
Esta é uma API REST completa para e-commerce que fornece todas as funcionalidades essenciais para uma loja online, incluindo gestão de produtos, utilizadores, pedidos, carrinho de compras e autenticação segura.
-
✅ Implementado:
- Autenticação JWT com refresh tokens
- Gestão de utilizadores (registo, login, perfil)
- Gestão de produtos (CRUD completo)
- Categorias de produtos
- Pesquisa e filtros avançados
- Paginação em todas as listagens
- Validação de dados robusta
- Middleware de autenticação e autorização
- Middleware de tratamento de erro global
-
🔄 Em Desenvolvimento:
- [] Carrinho de compras funcional
- [] Sistema de pedidos com diferentes estados
-
📋 Próximos Passos:
- [] Documentação completa da API
- [] Integração de pagamentos
- [] Sistema de notificações por email
- [] Sistema de reviews e avaliações
- [] Dashboard administrativo
- [] Relatórios e analytics
- [] Sistema de cupões de desconto
- [] API para aplicação móvel
buyfast-backend/
├── 📁 docs/ # Documentação do projecto
├── 📁 prisma/ # Configuração da base de dados
│ ├── 📁 seeds/ # Scripts de população
├── 📁 src/ # Código fonte
│ ├── 📁 config/ # Configurações da aplicação
│ ├── 📁 controllers/ # Controladores das rotas
│ ├── 📁 dtos/ # Data Transfer Objects
│ ├── 📁 middlewares/ # Middlewares personalizados
│ ├── 📁 routes/ # Definição das rotas
│ ├── 📁 services/ # Lógica de negócio
│ ├── 📁 types/ # Definições de tipos TypeScript
│ ├── 📁 utils/ # Utilitários e helpers
Certifica-te de que tens as seguintes ferramentas instaladas:
- Node.js (versão 20.11.1 ou superior)
- Git (versão 2.34.1 ou superior)
- PostgreSQL (versão 15 ou superior)
- Terminal Linux com Shell Bash (ou equivalente)
-
Clonar o repositório
git clone https://github.com/alberto-rj/buyfast-backend.git cd buyfast-backend
-
Instalar dependências
npm install
-
Configurar variáveis de ambiente
cp .env.example .env
Edita o arquivo
.env
com as tuas configurações (ver Variáveis de Ambiente) -
Configurar a base de dados
Certifica-te de que o PostgreSQL está em execução e cria uma base de dados:
CREATE DATABASE buyfast_db;
-
Executar migrações
npm run db:migrate
-
Popular a base de dados (opcional)
npm run db:seed
-
Compilar o projecto
npm run build
-
Iniciar o servidor
npm start
🎉 Pronto! A API estará disponível em http://localhost:3000
# Desenvolvimento
npm run dev # Inicia o servidor em modo desenvolvimento
npm run build # Compila o TypeScript para JavaScript
npm start # Inicia o servidor em produção
# Base de dados
npm run db:migrate # Executa as migrações da base de dados
npm run db:seed # Popula a base de dados com dados iniciais
Cria um arquivo .env
na raiz do projecto com as seguintes variáveis:
# Database
DATABASE_URL="postgresql://<user>:<password>@<hostname>:<port>/buyfast_db?schema=public"
# Frontend
CLIENT_BASE_URL="http://localhost:5173"
# Server
NODE_ENV="development"
PORT="3000"
# Authentication
JWT_ACCESS_SECRET="super-secret-access-key-here"
JWT_ACCESS_SECRET_EXPIRES_IN_MINUTES="15"
JWT_REFRESH_SECRET="super-secret-refresh-key-here"
JWT_REFRESH_SECRET_EXPIRES_IN_DAYS="14"
BCRYPT_SALT="10"
# Cloudinary
CLOUDINARY_CLOUD_NAME="your_cloud_name"
CLOUDINARY_API_KEY="your_api_key"
CLOUDINARY_API_SECRET="your_api_secret"
CLOUDINARY_FOLDER_NAME="buyfast-uploads"
# Product Image Upload
PRODUCT_UPLOAD_PATH="uploads/products"
PRODUCT_MAX_FILE_SIZE="2"
PRODUCT_MAX_FILE_COUNT="5"
PRODUCT_ALLOWED_FILE_TYPES="image/jpeg,image/png,image/webp"
⚠️ Importante: Nunca commits o arquivo.env
para o repositório. Usa senhas seguras em produção!
Mais detalhes
-
Banco de Dados
DATABASE_URL
: Conexão com banco PostgreSQL.
-
Frontend:
CLIENT_BASE_URL
: URL do frontend (ex.:http://localhost:5173
).
-
Servidor
NODE_ENV
: Ambiente da aplicação (development
,production
,test
).PORT
: Porta do servidor backend.
-
Autenticação:
JWT_ACCESS_SECRET
: Chave secreta para tokens de acesso.JWT_ACCESS_SECRET_EXPIRES_IN_MINUTES
: Expiração do token de acesso (minutos).JWT_REFRESH_SECRET
: Chave secreta para tokens de refresh.JWT_REFRESH_SECRET_EXPIRES_IN_DAYS
: Expiração do token de refresh (dias).BCRYPT_SALT
: Número de rounds usados no hash de senha.
-
Cloudinary:
CLOUDINARY_CLOUD_NAME
: Nome da conta no Cloudinary.CLOUDINARY_API_KEY
: Chave da API do Cloudinary.CLOUDINARY_API_SECRET
: Segredo da API do Cloudinary.CLOUDINARY_FOLDER_NAME
: Pasta no Cloudinary (opcional).
-
Upload de Produtos:
PRODUCT_UPLOAD_PATH
: Caminho local para uploads temporários.PRODUCT_MAX_FILE_SIZE
: Tamanho máximo do arquivo (MB).PRODUCT_MAX_FILE_COUNT
: Número máximo de arquivos por upload.PRODUCT_ALLOWED_FILE_TYPES
: Tipos de arquivos aceitos.
Contribuições são bem-vindas! Para contribuir:
- 🍴 Faz fork do projecto
- 🌟 Cria uma branch para a tua feature (
git checkout -b feature/AmazingFeature
) - 💾 Commit as tuas mudanças (
git commit -m 'Add some AmazingFeature'
) - 📤 Push para a branch (
git push origin feature/AmazingFeature
) - 🔄 Abre um Pull Request
- Segue os padrões de código existentes
- Adiciona testes para novas funcionalidades
- Atualiza a documentação quando necessário
- Usa mensagens de commit descritivas
Este projecto está licenciado sob a Licença MIT - vê o arquivo LICENSE para detalhes.
- GitHub: @alberto-rj
- LinkedIn: Alberto José
⭐ Se este projecto te ajudou, considera dar uma estrela no repositório!