LifePex/init/database.rb

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