API em Ruby on Rails para gerenciamento de carrinho de compras, com documentação via Swagger (RSwag), testes em RSpec, execução via Docker Compose e job de abandono de carrinho com Sidekiq.
- Carrinho por sessão com operações de adicionar, listar, alterar quantidade e remover produtos.
- Documentação disponível em http://localhost:3000/api-docs.
- Banco: PostgreSQL; Cache/filas: Redis; Background jobs: Sidekiq.
- Ruby 3.3.1
- Rails 7.1.3.2
- PostgreSQL 16
- Redis 7
- Sidekiq 7
- RSpec e `FactoryBot
- RuboCop
- RSwag (API Docs)
- Docker e `Docker Compose
- Controllers: regras de API (CartsController, ProductsController).
- Services`: lógica de domínio (CartService).
- Serializers: contratos de resposta (CartSerializer, CartItemSerializer
,ProductSerializer). - Jobs: MarkCartAsAbandonedJob usando Sidekiq Scheduler (config: config/schedule.yml).
- Docker e Docker Compose instalados.
- Opcional: Ruby/Bundler local para rodar fora de container.
1️⃣ Verificar variáveis de ambiente (.env)
- Ajuste conforme necessário:
POSTGRES_USER,POSTGRES_PASSWORD,DB_PORTREDIS_PORT,REDIS_URLRAILS_BIND,RAILS_PORT,WEB_PORTRAILS_ENV_DEV,RAILS_ENV_TESTDATABASE_URL_DEV,DATABASE_URL_TEST
- Valide interpolação: docker compose config
2️⃣ Subir serviços base
docker compose up -d db redis- Checar status/logs:
docker compose ps
docker compose logs -f db3️⃣ Preparar banco (primeira execução)
docker compose run --rm web rails db:create db:migrate- Popular dados (opcional):
docker compose run --rm web rails db:seed4️⃣ Subir aplicação e workers
docker compose up -d web (sobe db e redis)
docker compose up -d sidekiq (opcional, para jobs)5️⃣ Acessos:
- API: http://localhost:3000
- Swagger UI: http://localhost:3000/api-docs
- Sidekiq UI: http://localhost:3000/sidekiq
&& em um único comando; execute os comandos separadamente ou use ; apenas quando suportado.
bundle install
bundle exec rails db:prepare
bundle exec rails server
bundle exec sidekiq (para jobs)- UI: http://localhost:3000/api-docs
- Geração do arquivo: swagger/v1/swagger.yaml
- Para regerar a documentação via specs:
docker compose run --rm test rails rswag:specs:swaggerizeSimpleCov. A tarefa de geração roda em modo --dry-run e pode sair com código não-zero por cobertura, apesar de gerar o arquivo corretamente.
- GET /cart — lista itens do carrinho atual.
- POST /cart/add_item` — adiciona item ou altera quantidade (payload: product_id, quantity).
- DELETE /cart/:product_id` — remove item do carrinho.
- GET /products e GET /products/:id — produtos.
- Rodar suíte de testes:
docker compose --profile test run --rm testCobertura:
- Relatório em coverage/. Política atual exige 100% (.simplecov).
- Rodar RuboCop:
docker compose run --rm web rubocop- Preparar/migrar:
docker compose run --rm web rails db:prepare- Migrar:
docker compose run --rm web rails db:migrate- Seeds:
docker compose run --rm web rails db:seed- Subir Sidekiq:
docker compose up -d sidekiq- UI: http://localhost:3000/sidekiq
- Agendamentos: config/schedule.yml (marcar carrinhos como abandonados após 3h e remover após 7 dias).
- Variáveis via
.env(carregadas pelo Compose):- Banco:
- POSTGRES_USER
- POSTGRES_PASSWORD
- DB_PORT
- DATABASE_URL_DEV
- DATABASE_URL_TEST
- Redis:
- REDIS_PORT
- REDIS_URL
- App:
- RAILS_BIND
- RAILS_PORT
- WEB_PORT
- RAILS_ENV_DEV
- RAILS_ENV_TEST
- Banco:
- Observação: config/database.yml usa host, port, username, password das envs para development e test.