Skip to content

šŸ›’ API RESTful completa para e-commerce com Ruby on Rails. Inclui autenticação JWT, gestĆ£o de produtos/pedidos, Ć”rea admin, e frontend demo interativo. Pronta para produção com Docker.

Notifications You must be signed in to change notification settings

leonardo-matheus/Ecommerce-API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Ā 

History

5 Commits
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 

Repository files navigation

šŸ›’ Ecommerce API

API RESTful completa para e-commerce construĆ­da com Ruby on Rails.

Demo App Documentação Landing Page

🌐 Links RÔpidos

Recurso URL
šŸ  Landing Page Ver Site
šŸ“– Documentação Acessar Docs
šŸ›’ Demo App Testar Loja

šŸ“‹ ƍndice


šŸ“– Sobre o Projeto

Esta API fornece funcionalidades completas para um e-commerce, incluindo:

  • āœ… Autenticação JWT via Devise Token Auth
  • āœ… GestĆ£o de Produtos com categorias hierĆ”rquicas
  • āœ… GestĆ£o de Pedidos com controle de estoque automĆ”tico
  • āœ… Ɓrea Administrativa para gerenciamento completo
  • āœ… Ɓrea do Cliente (Storefront) para navegação e compras
  • āœ… Paginação em todas as listagens
  • āœ… Frontend Demo para testar a API

🌐 Demo Online

O projeto inclui um frontend demo completo que pode ser hospedado no GitHub Pages:

GitHub Pages

docs/
ā”œā”€ā”€ index.html        # Landing page com mĆ©tricas e features
ā”œā”€ā”€ documentation.html # Documentação tĆ©cnica completa
└── app.html          # Frontend demo funcional

Funcionalidades do Demo App

  • šŸ›ļø CatĆ”logo de Produtos - Navegue, filtre e busque
  • šŸ›’ Carrinho de Compras - Adicione, remova e altere quantidades
  • šŸ‘¤ Autenticação - Login/Registro com tokens
  • šŸ“¦ Pedidos - Crie e acompanhe seus pedidos
  • šŸ”„ Modo Demo - Funciona mesmo sem a API (dados mockados)

Deploy no GitHub Pages

  1. Faça push do repositório para o GitHub
  2. VĆ” em Settings > Pages
  3. Selecione branch main e pasta /docs
  4. Acesse: https://seu-usuario.github.io/ecommerce-api/

šŸ›  Tecnologias

Tecnologia Versão Descrição
Ruby 3.2.2 Linguagem de programação
Rails 7.0.x Framework web (API mode)
SQLite3 1.6.x Banco de dados
Devise Token Auth 1.2.x Autenticação JWT
Kaminari 1.2.x Paginação
Rack CORS 2.0.x Cross-Origin Resource Sharing

šŸ“¦ Estrutura do Projeto

app/
ā”œā”€ā”€ controllers/
│   ā”œā”€ā”€ admin/v1/              # Controllers administrativos
│   │   ā”œā”€ā”€ api_controller.rb      # Base com auth + verificação admin
│   │   ā”œā”€ā”€ categories_controller.rb
│   │   ā”œā”€ā”€ home_controller.rb     # Dashboard
│   │   ā”œā”€ā”€ orders_controller.rb
│   │   ā”œā”€ā”€ products_controller.rb
│   │   └── users_controller.rb
│   ā”œā”€ā”€ storefront/v1/         # Controllers da loja
│   │   ā”œā”€ā”€ api_controller.rb      # Base com auth opcional
│   │   ā”œā”€ā”€ categories_controller.rb
│   │   ā”œā”€ā”€ home_controller.rb     # PĆ”gina inicial
│   │   ā”œā”€ā”€ orders_controller.rb   # Pedidos do cliente
│   │   ā”œā”€ā”€ products_controller.rb # CatĆ”logo
│   │   └── profile_controller.rb  # Perfil do usuĆ”rio
│   ā”œā”€ā”€ concerns/
│   │   └── authenticable.rb   # Concern de autenticação
│   └── application_controller.rb
ā”œā”€ā”€ models/
│   ā”œā”€ā”€ category.rb            # Categorias (hierĆ”rquicas)
│   ā”œā”€ā”€ order.rb               # Pedidos
│   ā”œā”€ā”€ order_item.rb          # Itens do pedido
│   ā”œā”€ā”€ product.rb             # Produtos
│   └── user.rb                # UsuĆ”rios (admin/client)
config/
ā”œā”€ā”€ database.yml               # Configuração SQLite
ā”œā”€ā”€ routes.rb                  # Rotas da API
└── initializers/
    ā”œā”€ā”€ cors.rb                # Configuração CORS
    └── devise_token_auth.rb   # Configuração auth
db/
ā”œā”€ā”€ migrate/                   # Migrations
ā”œā”€ā”€ schema.rb                  # Schema do banco
└── seeds.rb                   # Dados iniciais

šŸš€ Instalação

PrƩ-requisitos

  • Ruby 3.2.x
  • Bundler
  • SQLite3

Passo a Passo

# 1. Clonar repositório
git clone <repo-url>
cd Ecommerce-API

# 2. Instalar dependĆŖncias
bundle install

# 3. Criar banco de dados
rails db:create

# 4. Executar migrations
rails db:migrate

# 5. Popular com dados de exemplo
rails db:seed

# 6. Iniciar servidor
rails server

Docker (Alternativa)

# Construir imagem
docker build -t ecommerce-api .

# Executar
docker run -p 3000:3000 ecommerce-api

šŸ” Autenticação

A API usa Devise Token Auth para autenticação baseada em tokens.

Registro de UsuƔrio

POST /auth/v1/user
Content-Type: application/json

{
  "name": "Seu Nome",
  "email": "email@exemplo.com",
  "password": "senha123",
  "password_confirmation": "senha123"
}

Login

POST /auth/v1/user/sign_in
Content-Type: application/json

{
  "email": "email@exemplo.com",
  "password": "senha123"
}

Headers de Autenticação

Após login, a resposta inclui headers que devem ser enviados em requisições autenticadas:

access-token: <token>
client: <client_id>
uid: <email>

šŸ“ Endpoints

Autenticação (/auth/v1/user)

Método Endpoint Descrição
POST /auth/v1/user Registrar usuƔrio
POST /auth/v1/user/sign_in Login
DELETE /auth/v1/user/sign_out Logout
PUT /auth/v1/user Atualizar conta
DELETE /auth/v1/user Deletar conta

Admin (/admin/v1) - Requer Autenticação + Perfil Admin

Método Endpoint Descrição
GET /home Dashboard com estatĆ­sticas
GET /categories Listar categorias
POST /categories Criar categoria
GET /categories/:id Ver categoria
PUT /categories/:id Atualizar categoria
DELETE /categories/:id Remover categoria
GET /products Listar produtos
POST /products Criar produto
GET /products/:id Ver produto
PUT /products/:id Atualizar produto
DELETE /products/:id Remover produto
GET /orders Listar todos pedidos
GET /orders/:id Ver pedido
PUT /orders/:id Atualizar status
POST /orders/:id/cancel Cancelar pedido
GET /users Listar usuƔrios
GET /users/:id Ver usuƔrio
PUT /users/:id Atualizar usuƔrio
DELETE /users/:id Remover usuƔrio

Storefront (/storefront/v1) - Loja

Método Endpoint Auth Descrição
GET /home āŒ PĆ”gina inicial (destaques)
GET /products āŒ CatĆ”logo de produtos
GET /products/:id āŒ Detalhes do produto
GET /categories āŒ Listar categorias
GET /categories/:id āŒ Categoria com produtos
GET /profile āœ… Ver perfil
PATCH /profile āœ… Atualizar perfil
GET /orders āœ… Meus pedidos
GET /orders/:id āœ… Ver meu pedido
POST /orders āœ… Criar pedido
POST /orders/:id/cancel āœ… Cancelar pedido

UtilitƔrios

Método Endpoint Descrição
GET /health Health check

šŸ“ Exemplos de Uso

Criar Produto (Admin)

curl -X POST http://localhost:3000/admin/v1/products \
  -H "Content-Type: application/json" \
  -H "access-token: <token>" \
  -H "client: <client>" \
  -H "uid: <email>" \
  -d '{
    "product": {
      "name": "Notebook Gamer",
      "description": "Notebook para jogos com RTX 4060",
      "price": 5999.90,
      "stock_quantity": 25,
      "sku": "NB-GAMER-01",
      "category_id": 1,
      "active": true
    }
  }'

Criar Pedido (Cliente)

curl -X POST http://localhost:3000/storefront/v1/orders \
  -H "Content-Type: application/json" \
  -H "access-token: <token>" \
  -H "client: <client>" \
  -H "uid: <email>" \
  -d '{
    "items": [
      {"product_id": 1, "quantity": 2},
      {"product_id": 3, "quantity": 1}
    ]
  }'

Buscar Produtos

# Busca por nome
curl "http://localhost:3000/storefront/v1/products?search=notebook"

# Filtrar por categoria
curl "http://localhost:3000/storefront/v1/products?category_id=1"

# Apenas disponĆ­veis
curl "http://localhost:3000/storefront/v1/products?available=true"

šŸ‘¤ Credenciais de Teste

Após rails db:seed:

Tipo Email Senha
Admin admin@ecommerce.com password123
Cliente cliente@teste.com password123

šŸ”„ Status de Pedido

Código Status Descrição
0 pending Aguardando pagamento
1 paid Pago
2 processing Em processamento
3 shipped Enviado
4 delivered Entregue
5 cancelled Cancelado

šŸ—‚ Modelos de Dados

User (UsuƔrio)

# Perfis disponĆ­veis
enum profile: { admin: 0, client: 1 }

# AssociaƧƵes
has_many :orders

# ValidaƧƵes
validates :name, presence: true
validates :email, presence: true, uniqueness: true

Category (Categoria)

# Hierarquia
belongs_to :parent, class_name: 'Category', optional: true
has_many :subcategories, class_name: 'Category'
has_many :products

# Scopes
scope :active, -> { where(active: true) }
scope :root_categories, -> { where(parent_id: nil) }

Product (Produto)

# AssociaƧƵes
belongs_to :category
has_many :order_items

# Scopes
scope :active, -> { where(active: true) }
scope :in_stock, -> { where('stock_quantity > 0') }
scope :by_category, ->(id) { where(category_id: id) }
scope :search, ->(term) { where('name LIKE ?', "%#{term}%") }

# MƩtodos
def available?
def reduce_stock!(quantity)
def formatted_price

Order (Pedido)

# Status
enum status: { pending: 0, paid: 1, processing: 2, shipped: 3, delivered: 4, cancelled: 5 }

# AssociaƧƵes
belongs_to :user
has_many :order_items
has_many :products, through: :order_items

# MƩtodos
def calculate_total
def cancel!

OrderItem (Item do Pedido)

# AssociaƧƵes
belongs_to :order
belongs_to :product

# MƩtodos
def subtotal

šŸ“„ LicenƧa

Este projeto estƔ sob a licenƧa MIT.

  • Deployment instructions

  • ...

About

šŸ›’ API RESTful completa para e-commerce com Ruby on Rails. Inclui autenticação JWT, gestĆ£o de produtos/pedidos, Ć”rea admin, e frontend demo interativo. Pronta para produção com Docker.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published