Projeto prático para aulas dos fundamentos de modelagem de banco de dados.
Antes de iniciar a aplicação, recomenda-se a execução da seguinte sequência de comandos:
rvm use 3.1.2
cd klaus-lube-exercicio-semana-8
bundle install
rails db:create
rails db:migrate
rails db:seed
Para iniciar o servidor, recomenda-se a utilização do comando ./bin/dev
, pois ele garante os assets serão todos devidamente processados.
Verificar versão do ruby utilizada:
rvm use 3.1.2
Verificar versão do Yarn
yarn -v
Criando uma nova aplicação rails:
rails new raro_food -c=tailwind -d=mysql -j=esbuild
cd raro_food
bin/rails db:create db:migrate db:seed
Adicione o seguinte trecho no Gemfile
:
group :development, :test do
# ....
gem 'rspec-rails'
gem 'shoulda-matchers'
gem 'faker'
end
Execute os seguintes comandos:
bin/rails generate rspec:install
bin/rails db:migrate db:test:prepare
bin/rails generate rspec:model State
No arquivo gerado rails_helper.rb
#...
Shoulda::Matchers.configure do |config|
config.integrate do |with|
with.test_framework :rspec
with.library :rails
end
end
No arquivo Gemfile
:
gem 'rubocop-rails', require: false
group :development do
# ...
gem 'rubocop-rails', require: false
end
Na raiz do projeto crie um arquivo .rubocop.yml
com o seguinte conteúdo:
require: rubocop-rails
AllCops:
NewCops: enable
TargetRubyVersion: 3.1.2
Ao executar o comando abaixo no terminal, serão listados os erros encontrados:
rubocop
Para corrigí-los, pode ser executado o comando:
rubocop -A
Na aplicação foi adicionado 4 entidades novas:
1- Card
- customerId (FK) INT NOT NULL
- name STRING NOT NULL
- card number STRING NOT NULL
- CVV Code STRING NOT NULL
- card type INT NOT NULL
- expiration date STRING NOT NULL
2- Payment
- cardId (FK) INT NOT NULL
- payment method INT NOT NULL
- paid amount DECIMAL NOT NULL
- status INT NOT NULL
3- Coupon
- administratorId (FK) INT NOT NULL
- code STRING NOT NULL
- name STRING NOT NULL
- description TEXT NOT NULL
- start date DATE NOT NULL
- end date DATE NOT NULL
- discount amount DECIMAL NOT NULL
4- CustomerOrder
- customerId (PK) INT NOT NULL
- orderId (PK) INT NOT NULL
- couponId (FK) INT NOT NULL
- paymentId (FK) INT NOT NULL
-
Relacionamento 1:1
- Pagamento UTILIZA Cupom
- ClientePedido EXIGE Pagamento (join table)
-
Relacionamento 1:N
- Cliente CADASTRA Cartão
- Administrador CADASTRA Cupom
- Cliente REALIZA Pedido
- ClientePedido UTILIZA Cupom
No projeto, ao ser clonado foi preciso mudar o socket e o password no arquivo database.yml, só assim a aplicação consegue rodar rails db:create.
Mas decidi não subir o arquivo database.yml e nem schema como foi informado em aula. Deixando o setup igual ao clonado inicialmente.
Nesse projeto, tive como maior desafio a interpretação do diagrama de entidade-relacionamento e codificar corretamente as relações entre entidades, principalmente a Join table, a qual tive dúvida se devia criar um model para ela ou não.
Este projeto foi desenvolvido por Klaus Lube, como parte do exercício semanal da Raro Academy(Professor Guilherme Andrade) para aprimorar as habilidades em Active Record, models, migrations e rails.