#!/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