11/08/2018, 21:21

Cách tạo 1 database với Lotus Framework

Tiếp tục bài viết lần trước về Bắt đầu một application với Lotus Framework chúng ta sẽ tìm hiểu thêm từng bước để xây dựng được 1 ứng dụng. Ở 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ữ ...

Tiếp tục bài viết lần trước về Bắt đầu một application với Lotus Framework chúng ta sẽ tìm hiểu thêm từng bước để xây dựng được 1 ứng dụng. Ở 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 Tạo database

Vào folder root rallyapp tạo file database.rb

require "sqlite3"

# Tạo mới database sử dụng SQLite3
db = SQLite3::Database.new 'rallyapp_development.db'

rows = db.execute <<-SQL
  create table users (
    name varchar(255),
    email varchar(255),
    gender int,
    about text,
    image_url varchar(255)
  );
SQL

Bước 2 Update database url

Vào file rallyapp/config update file .env.development để update url thành

RALLYAPP_DATABASE_URL="sqlite://db/rallyapp_development"

thay vì sử dụng

RALLYAPP_DATABASE_URL="file:///db/rallyapp_development"

Bước 3:

1) Truy cập vào folder rallyapp/lib/rallyapp

  • Tạo ra 1 User Entity. Ở folder entities tạo 1 file user.rb 1 Entity bao gồm các attributes giống như các fields trong User model.

alt text

require 'lotus/entity'

class User
  include Lotus::Entity
  attributes :name, :email, :gender, :about, :image_url
end
  • 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. Ở file mapping.rb

  • 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
end

**3) Truy cập vào folder rallyapp/lib Tại file rallyapp.rb**

Các bạn mở dòng comment. Sử dụng mapping này

mapping "#{dir}/config/mapping"

Và comment lại phần mapping trực tiếp tại file. [Xem code tại github để biết rõ hơn](https://github.com/mymai91/lotus-rally-app/tree/create-database)

### Bước 4 Viết migration để tạo connect database

Vào file rallyapp/lib/rallyapp
Tạo 1 file migrator.rb

```ruby
require_relative '../../config/environment'

module Leoleo
  class Migrator
    require 'sequel'
    def self.migrate!
      db = Sequel.connect(ENV['LEOLEO_DATABASE_URL'])
    end
  end
end

Bước 5: Tạo seeds data

Vào rallyapp/db Tạo file seeds.rb
Update data seeds vào seeds.rb

[
  {
    "name": "Spears Russell",
    "email": "spearsrussell@yogasm.com",
    "gender": 1,
    "about": "I'm Spears",
    "image_url": "http://placehold.it/32x32"
  },
  {
    "name": "Ann York",
    "email": "annyork@yogasm.com",
    "gender": 1,
    "about": "I'm Ann York",
    "image_url": "http://placehold.it/32x32"
  }
].each do |user_attrs|
  user = User.new(user_attrs)
  UserRepository.persist(user)
end

Bước 6: Đị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

namespace :db do
  task :migrate do
    require_relative 'lib/rallyapp/migrator'
    RallyApp::Migrator.migrate!
  end

  task :seed => [:migrate] do
    load 'db/seeds.rb'
  end
end

Sau đó chạy lệnh sau:

bundle exec rake db:seed

Cảm ơn các bạn đã đọc. Hy vọng qua bài này giúp bạn hiểu thêm về Lotus Framework
Bài tiếp theo sẽ là bài hướng dẫn cách tạo API với Lotus Framework
Các bạn xem code chi tiết tại đây

0