135 lines
3.1 KiB
Ruby
Executable File
135 lines
3.1 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
require "sequel"
|
|
require "colorize"
|
|
require_relative "../src/utils/semver.rb"
|
|
|
|
DB = Sequel.connect ARGV[0]
|
|
|
|
if ARGV[1] == "debug"
|
|
require "pry"
|
|
binding.pry
|
|
end
|
|
|
|
def current_version
|
|
DB[:meta].first[:version] rescue 0
|
|
end
|
|
|
|
def migrate(version, &block)
|
|
puts "Check migration #{version}"
|
|
if current_version < version
|
|
puts "Migrate #{version}".blue
|
|
begin
|
|
yield
|
|
DB[:meta].update(version: version)
|
|
puts "Successfuly set version #{version}"
|
|
rescue => err
|
|
puts err.message.red
|
|
exit 1
|
|
end
|
|
else
|
|
puts "Already migrated #{version}".blue
|
|
end
|
|
end
|
|
|
|
migrate 1 do
|
|
DB.create_table :meta do
|
|
primary_key :id
|
|
Int :version
|
|
end
|
|
DB[:meta].insert(version: 1)
|
|
|
|
DB.create_table :pexs do
|
|
primary_key :id
|
|
String :name
|
|
Float :amount
|
|
end rescue puts "pexs already exists".yellow
|
|
|
|
DB.create_table :user_pexs do
|
|
primary_key :id
|
|
Int :user_id
|
|
Int :pex_id
|
|
Date :created_at
|
|
end rescue puts "user_pexs already exists".yellow
|
|
|
|
DB.create_table :users do
|
|
primary_key :id
|
|
String :username
|
|
String :hashed_password
|
|
end rescue puts "users already exists".yellow
|
|
puts "Initialized database".green
|
|
end
|
|
|
|
migrate 2 do
|
|
DB.alter_table :pexs do
|
|
add_column :category, String
|
|
end rescue puts "pexs.category already exists".yellow
|
|
puts "Migrated categories".green
|
|
end
|
|
|
|
migrate 3 do
|
|
DB.alter_table :pexs do
|
|
add_column :user_id, :Int
|
|
end rescue puts "pexs.user_id already exists".yellow
|
|
DB[:pexs].update(user_id: 1)
|
|
puts "Migrated pex belonging to user".green
|
|
end
|
|
|
|
migrate 4 do
|
|
DB.alter_table :pexs do
|
|
set_column_default(:category, '')
|
|
end rescue puts "pexs.category default already exists".yellow
|
|
DB[:pexs].where(category: nil).update(category: '')
|
|
puts "Migrated pex default category".green
|
|
end
|
|
|
|
migrate 5 do
|
|
DB.alter_table :meta do
|
|
add_column :code_version, String
|
|
end rescue puts "meta.code_version already exists".yellow
|
|
DB[:meta].update(code_version: "0")
|
|
end
|
|
|
|
migrate 6 do
|
|
DB.alter_table :meta do
|
|
add_column :code_date, String
|
|
end rescue puts "meta.code_date already exists".yellow
|
|
end
|
|
|
|
migrate 7 do
|
|
DB[:pexs].each { |pex| DB[:pexs].where(id: pex[:id]).update(category: pex[:category].to_s.downcase) }
|
|
end
|
|
|
|
migrate 8 do
|
|
DB.alter_table :pexs do
|
|
add_column :hidden, TrueClass
|
|
end rescue puts "pex.hidden already exists".yellow
|
|
DB[:pexs].each { |pex| DB[:pexs].where(id: pex[:id]).update(hidden: false) }
|
|
end
|
|
|
|
migrate 9 do
|
|
DB.create_table :achievements do
|
|
primary_key :id
|
|
Int :user_id
|
|
String :name
|
|
String :success_name
|
|
String :parameters_json
|
|
String :icon
|
|
end
|
|
end
|
|
|
|
migrate 10 do
|
|
DB.alter_table :pexs do
|
|
add_column :flag, :String
|
|
end rescue puts "pexs.flag already exists".yellow
|
|
puts "Migrated pex flag for bookmarks".green
|
|
end
|
|
|
|
puts "End migration".green
|
|
CODE_VERSION = `git tag`.split("\n").map{ |str| Utils::Semver.new(str) }.sort.last.to_s
|
|
CODE_DATE=`git show #{CODE_VERSION} --pretty="format:%as"`.split("\n").first
|
|
DB[:meta].update(code_version: CODE_VERSION)
|
|
DB[:meta].update(code_date: CODE_DATE)
|
|
puts "Set code version to #{CODE_VERSION}".green
|
|
puts "Set code date to #{CODE_DATE}".green
|