07/09/2018, 16:00

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.

alt text

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

0