# frozen_string_literal: true class InitialDb < ActiveRecord::Migration[5.2] def change enable_extension "hstore" unless extension_enabled?("hstore") enable_extension "uuid-ossp" unless extension_enabled?("uuid-ossp") # Attributes for ESM create_table :bot_attributes do |t| t.boolean :maintenance_mode_enabled, null: false, default: false t.string :maintenance_message, null: true t.string :status_type, null: false, default: "PLAYING" t.string :status_message, null: true t.integer :community_count, default: 0 t.integer :server_count, default: 0 t.integer :user_count, default: 0 end # communities create_table :communities do |t| t.string :community_id, null: false # has unique index t.text :community_name t.string :guild_id, null: false # has unique index t.string :logging_channel_id t.boolean :log_reconnect_event, default: false t.boolean :log_xm8_event, default: true t.boolean :log_discord_log_event, default: true t.boolean :player_mode_enabled, default: true t.json :territory_admin_ids, default: [] t.string :command_prefix, default: nil t.boolean :welcome_message_enabled, default: true t.text :welcome_message, default: "" t.timestamps t.datetime :deleted_at, index: true end # command_configurations create_table :command_configurations do |t| t.integer :community_id, null: false, index: true t.string :command_name, null: false, index: true t.boolean :enabled, default: true t.boolean :notify_when_disabled, default: true t.integer :cooldown_quantity, default: 2 t.string :cooldown_type, default: "seconds" t.boolean :allowed_in_text_channels, default: true t.boolean :whitelist_enabled, default: false t.json :whitelisted_role_ids, default: [] t.timestamps t.datetime :deleted_at, index: true end # Command usage counts create_table :command_counts do |t| t.string :command_name, null: false, index: true t.integer :execution_count, null: false, default: 0 end # Command Cache create_table :command_caches do |t| t.string :command_name, index: true t.string :command_type t.string :command_category t.text :command_description t.text :command_example t.text :command_usage t.text :command_arguments t.json :command_aliases t.json :command_defines end # cooldowns create_table :cooldowns do |t| t.string :command_name t.integer :community_id t.integer :server_id t.integer :user_id t.string :steam_uid t.integer :cooldown_quantity t.string :cooldown_type t.integer :cooldown_amount, default: 0 t.datetime :expires_at t.timestamps end # Downloads create_table :downloads do |t| t.uuid :uuid, unique: true, null: false t.string :version, unique: true, null: false t.string :file t.boolean :current_release t.timestamps end # logs create_table :logs do |t| t.uuid :uuid, null: false t.integer :server_id, null: false, index: true t.text :search_text t.string :requestors_user_id t.datetime :expires_at, index: true t.timestamps end # log_entries create_table :log_entries do |t| t.integer :log_id, null: false, index: true t.datetime :log_date, null: false t.string :file_name, null: false t.json :entries end # notifications create_table :notifications do |t| t.integer :community_id, null: false, index: true t.string :notification_type, null: false t.text :notification_title t.text :notification_description t.string :notification_color t.string :notification_category t.timestamps end # requests create_table :requests do |t| t.uuid :uuid, index: true t.string :uuid_short t.integer :requestor_user_id t.integer :requestee_user_id t.string :requested_from_channel_id, null: false t.string :command_name, null: false t.json :command_arguments, default: nil t.datetime :expires_at, index: true t.timestamps end # servers create_table :servers do |t| t.string :server_id, null: false t.integer :community_id, null: false, index: true t.text :server_name t.text :server_key, null: true t.string :server_ip t.string :server_port t.datetime :server_start_time t.datetime :disconnected_at t.timestamps t.datetime :deleted_at, index: true end # server_mods create_table :server_mods do |t| t.integer :server_id, null: false, index: true t.text :mod_name, null: false t.text :mod_link, default: nil t.string :mod_version, default: nil t.boolean :mod_required, null: false, default: false t.timestamps t.datetime :deleted_at, index: true end # server_rewards create_table :server_rewards do |t| t.integer :server_id, index: true, null: false t.json :reward_items, default: {} t.bigint :player_poptabs, default: 0 t.bigint :locker_poptabs, default: 0 t.bigint :respect, default: 0 t.datetime :deleted_at, index: true end # server_settings create_table :server_settings do |t| t.integer :server_id, index: true t.text :extdb_path, default: nil t.integer :gambling_payout, default: 95 t.integer :gambling_modifier, default: 1 t.float :gambling_randomizer_min, default: 0 t.float :gambling_randomizer_mid, default: 0.5 t.float :gambling_randomizer_max, default: 1 t.integer :gambling_win_chance, default: 35 t.text :logging_path, default: nil t.boolean :logging_add_player_to_territory, default: true t.boolean :logging_demote_player, default: true t.boolean :logging_exec, default: true t.boolean :logging_gamble, default: true t.boolean :logging_modify_player, default: true t.boolean :logging_pay_territory, default: true t.boolean :logging_promote_player, default: true t.boolean :logging_remove_player_from_territory, default: true t.boolean :logging_reward, default: true t.boolean :logging_transfer, default: true t.boolean :logging_upgrade_territory, default: true t.integer :max_payment_count, default: 0 t.string :request_thread_type, default: "exile" t.float :request_thread_tick, default: 0.1 t.integer :territory_payment_tax, default: 0 t.integer :territory_upgrade_tax, default: 0 t.integer :territory_price_per_object, default: 10 t.integer :territory_lifetime, default: 7 t.integer :server_restart_hour, default: 3 t.integer :server_restart_min, default: 0 t.datetime :deleted_at, index: true end # territories create_table :territories do |t| t.integer :server_id, null: false, index: true t.integer :territory_level, null: false, index: true t.bigint :territory_purchase_price, null: false t.integer :territory_radius, null: false t.integer :territory_object_count, null: false t.timestamps t.datetime :deleted_at, index: true end # uploads create_table :uploads do |t| t.uuid :uuid, null: false, index: true t.string :file, null: false t.string :file_name, null: false t.string :file_type, null: false t.integer :file_size, null: false t.timestamps end # users create_table :users do |t| t.string :discord_id, null: false t.string :discord_username, null: false t.string :discord_discriminator, null: false t.text :discord_avatar, default: nil t.string :discord_access_token, default: nil t.string :discord_refresh_token, default: nil t.string :steam_uid, default: nil, index: true t.timestamps end # user_steam_data create_table :user_steam_data do |t| t.integer :user_id t.string :username, default: nil t.text :avatar, default: nil t.text :profile_url, default: nil t.string :profile_visibility, default: nil t.datetime :profile_created_at, default: nil t.boolean :community_banned, default: false t.boolean :vac_banned, default: false t.integer :number_of_vac_bans, default: 0 t.integer :days_since_last_ban, default: 0 t.timestamps end # user_gambling_stats create_table :user_gamble_stats do |t| t.integer :user_id, null: false, index: true t.integer :server_id, null: false, index: true t.integer :current_streak, null: false, default: 0 t.integer :total_wins, null: false, default: 0 t.integer :longest_win_streak, null: false, default: 0 t.bigint :total_poptabs_won, null: false, default: 0 t.bigint :total_poptabs_loss, null: false, default: 0 t.integer :longest_loss_streak, null: false, default: 0 t.integer :total_losses, null: false, default: 0 t.string :last_action, default: nil t.timestamps end # user_notification_preferences create_table :user_notification_preferences do |t| t.integer :user_id, null: false, index: true t.integer :server_id, null: false, index: true t.boolean :base_raid, null: false, default: true t.boolean :charge_plant_started, null: false, default: true t.boolean :custom, null: false, default: true t.boolean :flag_restored, null: false, default: true t.boolean :flag_steal_started, null: false, default: true t.boolean :flag_stolen, null: false, default: true t.boolean :grind_started, null: false, default: true t.boolean :hack_started, null: false, default: true t.boolean :protection_money_due, null: false, default: true t.boolean :protection_money_paid, null: false, default: true t.boolean :marxet_item_sold, null: false, default: true end add_index :communities, :community_id, unique: true add_index :communities, :guild_id, unique: true add_index :cooldowns, %i[command_name user_id community_id] add_index :cooldowns, %i[command_name steam_uid community_id] add_index :downloads, :current_release add_index :logs, :uuid, unique: true add_index :log_entries, [:log_id, :log_date] add_index :log_entries, [:log_id, :log_date, :file_name] add_index :servers, :server_id, unique: true add_index :servers, :server_key, unique: true add_index :users, :discord_id, unique: true add_index :requests, %i[requestee_user_id uuid_short], unique: true add_foreign_key :command_configurations, :communities add_foreign_key :logs, :servers add_foreign_key :log_entries, :logs add_foreign_key :requests, :users, column: :requestor_user_id add_foreign_key :requests, :users, column: :requestee_user_id add_foreign_key :servers, :communities add_foreign_key :server_mods, :servers add_foreign_key :server_rewards, :servers add_foreign_key :server_settings, :servers add_foreign_key :territories, :servers add_foreign_key :user_steam_data, :users add_foreign_key :user_gamble_stats, :users add_foreign_key :user_gamble_stats, :servers add_foreign_key :user_notification_preferences, :users add_foreign_key :user_notification_preferences, :servers end end