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 helpersCertifica-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
.envcom 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 iniciaisCria 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.envpara 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!