Cách tạo 1 database với Lotus Framework v0.5.0
Lotus đã update với vesion 0.5.0 , nhiều tính năng tiện ích được cung cấp, trong đó Lotus đã cập nhật về migration để tạo table rất nhanh và tiện lợi nhé Ở bài này mình xin đi vào việc sử dụng sqlite để tạo database, áp dụng lotus-model để tạo entity, sử dụng repository để giao tiếp với ...
Lotus đã update với vesion 0.5.0, nhiều tính năng tiện ích được cung cấp, trong đó Lotus đã cập nhật về migration để tạo table rất nhanh và tiện lợi nhé
Ở bài này mình xin đi vào việc sử dụng sqlite để tạo database, áp dụng lotus-model để tạo entity, sử dụng repository để giao tiếp với database và mapping dữ liệu.
Mình sẽ tạo ra 1 seeds database về users
Install ở Gemfile
group :development, :test do gem 'sqlite3' end
Bước 1 Update lại cách config database url
Từ folder root truy cập vào file rally.rb để update
adapter type: :file_system, uri: ENV['LEOLEO_DATABASE_URL']
update :file_system thành :sql
adapter type: :sql, uri: ENV['LEOLEO_DATABASE_URL ']
Từ folder root truy cập vào file .env.development & .env.test
LEOLEO_DATABASE_URL ="file_sytem://db/leoleo_test.db"
update :file_system thành :sqlite
LEOLEO_DATABASE_URL="sqlite://db/leoleo_test.db"
Bước 2:
1) Truy cập vào folder rallyapp/lib/rallyapp/entities
- Tạo ra 1 User Entity. Ở folder entities tạo 1 file user.rb 1 Entity bao gồm các attributes đại diện cho đối tượng User.
require 'lotus/entity' class User include Lotus::Entity attributes :name, :email, :gender, :about, :image_url, :created_at, :updated_at end
(nếu bạn muốn có trường created_at & updated_at thì define vào nếu ko thì có thể remove)
- Tạo ra 1 User Repository Ở folder repositories tạo 1 file user.rb Repository nó cung cấp một API chuẩn để truy vấn và thực hiện các xử lý trên một cơ sở dữ liệu
require 'lotus/repository' class UserRepository include Lotus::Repository end
2) Truy cập vào folder rallyapp/lib/config/mapping.rb
lotus-model tuân theo data-mapper pattern, nghĩa là cần có một bước đệm ở giữa entity object(Ruby object) và DB. Nhiệm vụ của mapper là kết nối entity attribute với DB table column
- Mapping kiểu dữ liệu của attributes
collection :users do entity User repository UserRepository attribute :id, Integer attribute :name, String attribute :email, String attribute :gender, Integer attribute :about, String attribute :image_url, String attribute :created_at, DateTime attribute :updated_at, DateTime end
3) Truy cập vào folder rallyapp/lib/rallyapp.rb
Các bạn mở dòng comment. Sử dụng mapping này
mapping "#{__dir__}/config/mapping"
Và comment out lại đoạn code mapping được viết sẵn
Bước 3: Create 1 database
lotus db create
Bước 4: Generator migrate
lotus g migration create_user
Bước 5: Apply database
lotus db apply
Bước 6: Tạo seeds data
Vào rallyapp/db Tạo file seeds.rb
Update data seeds vào seeds.rb
UserRepository.clear 20.times do user_attr = { "name": "Spears Russell", "email": "[email protected]", "gender": 1, "about": "I'm Spears", "image_url": "http://placehold.it/32x32" } user = User.new(user_attr) UserRepository.persist(user) end
Bước 7: Định nghĩa một task ở rake file để run migration
Truy cập vào rallyapp/Rakefile
Add task này vào file Rakefile
require 'rake' require 'rake/testtask' require 'lotus/environment' require Lotus::Environment.new.env_config Rake::TestTask.new do |t| t.pattern = 'spec/**/*_spec.rb' t.libs << 'spec' end task default: :test task spec: :test namespace :db do task :seed do load 'db/seeds.rb' end end
Sau đó chạy lệnh sau:
rake db:seed
Yah!! Xong rồi, cực đơn giản để tạo 1 DB với Lotus v0.5.0