Sistema de gerenciamento de sobreviventes em um apocalipse zumbi, com controle de recursos, escambo e monitoramento de infecção.
- Ruby on Rails 8
- PostgreSQL
- JBuilder (JSON rendering)
- RSpec, FactoryBot, Faker (testes)
- SimpleCov, RubyCritic (cobertura e análise de qualidade)
- Dotenv (variáveis de ambiente)
- Docker + Docker Compose (opcional, Docker v20.10.13+ com Compose v2+ ativado)
Pré-requisitos
- Ruby 3.4.4
- PostgreSQL
- Bundler (
gem install bundler)
Passos
git clone https://github.com/rafaelricci/zssn.git
cd zssn
bundle install
cp .env.example .env
Edite o .env:
DB_USERNAME=postgres
DB_PASSWORD=postgres
DB_NAME_DEV=zssn_development
DB_NAME_TEST=zssn_test
DB_HOST=db
Configure o banco de dados:
rails db:create db:migrate
Inicie o servidor:
rails server
Execute os testes:
RAILS_ENV=test bundle exec rspec
Pré-requisitos
- Docker
- Docker Compose
makeinstalado
Passos
cp .env.example .env
Edite o .env:
DB_USERNAME=postgres
DB_PASSWORD=postgres
DB_NAME_DEV=zssn_development
DB_NAME_TEST=zssn_test
DB_HOST=db
Utilize o make
make build # constrói as imagens
make setup # cria e migra o banco
make up # inicia o app em http://localhost:3000
Rodar os testes:
make test
Outros comandos úteis:
| Comando | Ação |
|---|---|
make down |
Para e remove os containers |
make db-reset |
Reseta o banco de dados |
POST /api/v1/survivors– Criar sobreviventePUT /api/v1/survivors/:id– Atualizar localizaçãoPUT /api/v1/survivors/:id/inventory– Atualizar inventárioPOST /api/v1/infection_reports– Reportar infecçãoPOST /api/v1/trade– Escambo
GET /api/v1/reports/infected_percentageGET /api/v1/reports/non_infected_percentageGET /api/v1/reports/average_itemsGET /api/v1/reports/lost_points
curl -X POST http://localhost:3000/api/v1/survivors \
-H "Content-Type: application/json" \
-d '{
"survivor": {
"name": "Alice",
"age": 28,
"gender": "female",
"latitude": -12.345,
"longitude": 45.678
}
}'
curl -X PUT http://localhost:3000/api/v1/survivors/1 \
-H "Content-Type: application/json" \
-d '{
"survivor": {
"latitude": -10.000,
"longitude": 50.000
}
}'
curl -X PUT http://localhost:3000/api/v1/survivors/1/inventory \
-H "Content-Type: application/json" \
-d '{
"inventory": {
"kind": "food",
"operation": "add",
"quantity": 3
}
}'
curl -X POST http://localhost:3000/api/v1/infection_reports \
-H "Content-Type: application/json" \
-d '{
"infection_report": {
"reporter_id": 2,
"reported_id": 1
}
}'
curl -X POST http://localhost:3000/api/v1/trade \
-H "Content-Type: application/json" \
-d '{
"trade": {
"offerer_id": 1,
"receiver_id": 2,
"offer_items": {
"water": 1
},
"request_items": {
"food": 1,
"ammo": 1
}
}
}'
curl http://localhost:3000/api/v1/reports/infected_percentage
curl http://localhost:3000/api/v1/reports/non_infected_percentage
curl http://localhost:3000/api/v1/reports/average_items
curl http://localhost:3000/api/v1/reports/lost_points
- Controllers enxutos com Service Objects (
callable) - Validações e regras de negócio encapsuladas nos models
- Serialização JSON via JBuilder
- Testes automatizados com RSpec e FactoryBot
- Cobertura de testes com SimpleCov
- Docker opcional para ambiente de desenvolvimento isolado
- RSpec (
spec/) - Cobertura:
coverage/gerado pelo SimpleCov - Análise de qualidade:
rubycritic(executar combundle exec rubycritic)
- Completo (Atendendo a todos os requisitos do desafio)
- Pipeline 🟢
- 100% de aprovação Brakeman
- 100% de cobertura de testes
- 100% aprovação Rubocop
- 95% de aprovação Rubycritic
- Docker-friendly (Setup Docker para desenvolvimento local)
- API RESTful (Seguindo boas práticas de desenvolvimento de API RESTful)
- Sem autenticação (por proposta do desafio)
GitHub Actions
Brakeman
Rspec + Simplecov
Rubycritic



