Skip to content

alberto-rj/buyfast-backend

Repository files navigation

BuyFast API 🛒

Uma API REST robusta para e-commerce construída com Node.js, TypeScript, Express.js e PostgreSQL

Node.js  TypeScript  ExpressJS  PostgreSQL  Prisma 

Índice

Sobre o Projecto

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.

Funcionalidades

  • ✅ 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

Tecnologias

Backend

Node.js  TypeScript  ExpressJS  PostgreSQL  Prisma 

Desenvolvimento

Prettier  Git  VS Code  Insomnia 

Documentações

Estrutura do Projecto

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

Instalação e Configuração

Pré-requisitos

Certifica-te de que tens as seguintes ferramentas instaladas:

Passos de Instalação

  1. Clonar o repositório

    git clone https://github.com/alberto-rj/buyfast-backend.git
    cd buyfast-backend
  2. Instalar dependências

    npm install
  3. Configurar variáveis de ambiente

    cp .env.example .env

    Edita o arquivo .env com as tuas configurações (ver Variáveis de Ambiente)

  4. 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;
  5. Executar migrações

    npm run db:migrate
  6. Popular a base de dados (opcional)

    npm run db:seed
  7. Compilar o projecto

    npm run build
  8. Iniciar o servidor

    npm start

🎉 Pronto! A API estará disponível em http://localhost:3000

Scripts Disponíveis

# 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

Variáveis de Ambiente

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ção

Contribuições são bem-vindas! Para contribuir:

  1. 🍴 Faz fork do projecto
  2. 🌟 Cria uma branch para a tua feature (git checkout -b feature/AmazingFeature)
  3. 💾 Commit as tuas mudanças (git commit -m 'Add some AmazingFeature')
  4. 📤 Push para a branch (git push origin feature/AmazingFeature)
  5. 🔄 Abre um Pull Request

Diretrizes de Contribuição

  • 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

Licença

Este projecto está licenciado sob a Licença MIT - vê o arquivo LICENSE para detalhes.

Autores

Alberto José


Se este projecto te ajudou, considera dar uma estrela no repositório!

About

Uma API REST robusta para e-commerce construída com Node.js, TypeScript, Express.js e PostgreSQL

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published