diff --git a/modules/mining-checker/sql/schema.mysql.sql b/modules/mining-checker/sql/schema.mysql.sql index ddaf071..f0ea87a 100644 --- a/modules/mining-checker/sql/schema.mysql.sql +++ b/modules/mining-checker/sql/schema.mysql.sql @@ -123,6 +123,27 @@ CREATE TABLE IF NOT EXISTS miningcheck_payouts ( KEY idx_miningcheck_payouts_project_payout_at (project_key, payout_at) ); +CREATE TABLE IF NOT EXISTS miningcheck_miner_offers ( + id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + project_key VARCHAR(64) NOT NULL, + label VARCHAR(120) NOT NULL, + runtime_months INT NULL, + mining_speed_value DECIMAL(20,4) NULL, + mining_speed_unit VARCHAR(8) NULL, + bonus_speed_value DECIMAL(20,4) NULL, + bonus_speed_unit VARCHAR(8) NULL, + base_price_amount DECIMAL(20,8) NOT NULL, + base_price_currency VARCHAR(10) NOT NULL, + payment_type VARCHAR(10) NOT NULL DEFAULT 'fiat', + auto_renew TINYINT(1) NOT NULL DEFAULT 0, + note TEXT, + is_active TINYINT(1) NOT NULL DEFAULT 1, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT fk_mining_miner_offers_project FOREIGN KEY (project_key) REFERENCES miningcheck_projects(project_key) ON DELETE CASCADE, + CONSTRAINT fk_mining_miner_offers_base_price_currency_currency FOREIGN KEY (base_price_currency) REFERENCES miningcheck_currencies(code) +); + CREATE TABLE IF NOT EXISTS miningcheck_targets ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, project_key VARCHAR(64) NOT NULL, @@ -156,27 +177,6 @@ CREATE TABLE IF NOT EXISTS miningcheck_dashboard_definitions ( CONSTRAINT uq_mining_dashboards_project_name UNIQUE (project_key, name) ); -CREATE TABLE IF NOT EXISTS miningcheck_miner_offers ( - id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - project_key VARCHAR(64) NOT NULL, - label VARCHAR(120) NOT NULL, - runtime_months INT NULL, - mining_speed_value DECIMAL(20,4) NULL, - mining_speed_unit VARCHAR(8) NULL, - bonus_speed_value DECIMAL(20,4) NULL, - bonus_speed_unit VARCHAR(8) NULL, - base_price_amount DECIMAL(20,8) NOT NULL, - base_price_currency VARCHAR(10) NOT NULL, - payment_type VARCHAR(10) NOT NULL DEFAULT 'fiat', - auto_renew TINYINT(1) NOT NULL DEFAULT 0, - note TEXT, - is_active TINYINT(1) NOT NULL DEFAULT 1, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT fk_mining_miner_offers_project FOREIGN KEY (project_key) REFERENCES miningcheck_projects(project_key) ON DELETE CASCADE, - CONSTRAINT fk_mining_miner_offers_base_price_currency_currency FOREIGN KEY (base_price_currency) REFERENCES miningcheck_currencies(code) -); - CREATE TABLE IF NOT EXISTS miningcheck_purchased_miners ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, project_key VARCHAR(64) NOT NULL, diff --git a/modules/mining-checker/sql/schema.pgsql.sql b/modules/mining-checker/sql/schema.pgsql.sql index 605922e..17f6153 100644 --- a/modules/mining-checker/sql/schema.pgsql.sql +++ b/modules/mining-checker/sql/schema.pgsql.sql @@ -132,6 +132,27 @@ CREATE TABLE IF NOT EXISTS miningcheck_payouts ( CREATE INDEX IF NOT EXISTS idx_miningcheck_payouts_project_payout_at ON miningcheck_payouts(project_key, owner_sub, payout_at); +CREATE TABLE IF NOT EXISTS miningcheck_miner_offers ( + id BIGSERIAL PRIMARY KEY, + project_key VARCHAR(64) NOT NULL, + label VARCHAR(120) NOT NULL, + runtime_months INTEGER, + mining_speed_value NUMERIC(20,4), + mining_speed_unit VARCHAR(8), + bonus_speed_value NUMERIC(20,4), + bonus_speed_unit VARCHAR(8), + base_price_amount NUMERIC(20,8) NOT NULL, + base_price_currency VARCHAR(10) NOT NULL, + payment_type VARCHAR(10) NOT NULL DEFAULT 'fiat', + auto_renew BOOLEAN NOT NULL DEFAULT FALSE, + note TEXT, + is_active BOOLEAN NOT NULL DEFAULT TRUE, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_mining_miner_offers_project FOREIGN KEY (project_key) REFERENCES miningcheck_projects(project_key) ON DELETE CASCADE, + CONSTRAINT fk_mining_miner_offers_base_price_currency_currency FOREIGN KEY (base_price_currency) REFERENCES miningcheck_currencies(code) +); + CREATE TABLE IF NOT EXISTS miningcheck_targets ( id BIGSERIAL PRIMARY KEY, project_key VARCHAR(64) NOT NULL, @@ -167,27 +188,6 @@ CREATE TABLE IF NOT EXISTS miningcheck_dashboard_definitions ( CONSTRAINT uq_mining_dashboards_project_name UNIQUE (project_key, owner_sub, name) ); -CREATE TABLE IF NOT EXISTS miningcheck_miner_offers ( - id BIGSERIAL PRIMARY KEY, - project_key VARCHAR(64) NOT NULL, - label VARCHAR(120) NOT NULL, - runtime_months INTEGER, - mining_speed_value NUMERIC(20,4), - mining_speed_unit VARCHAR(8), - bonus_speed_value NUMERIC(20,4), - bonus_speed_unit VARCHAR(8), - base_price_amount NUMERIC(20,8) NOT NULL, - base_price_currency VARCHAR(10) NOT NULL, - payment_type VARCHAR(10) NOT NULL DEFAULT 'fiat', - auto_renew BOOLEAN NOT NULL DEFAULT FALSE, - note TEXT, - is_active BOOLEAN NOT NULL DEFAULT TRUE, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - CONSTRAINT fk_mining_miner_offers_project FOREIGN KEY (project_key) REFERENCES miningcheck_projects(project_key) ON DELETE CASCADE, - CONSTRAINT fk_mining_miner_offers_base_price_currency_currency FOREIGN KEY (base_price_currency) REFERENCES miningcheck_currencies(code) -); - CREATE TABLE IF NOT EXISTS miningcheck_purchased_miners ( id BIGSERIAL PRIMARY KEY, project_key VARCHAR(64) NOT NULL, diff --git a/modules/mining-checker/sql/schema.sql b/modules/mining-checker/sql/schema.sql index ddaf071..f0ea87a 100644 --- a/modules/mining-checker/sql/schema.sql +++ b/modules/mining-checker/sql/schema.sql @@ -123,6 +123,27 @@ CREATE TABLE IF NOT EXISTS miningcheck_payouts ( KEY idx_miningcheck_payouts_project_payout_at (project_key, payout_at) ); +CREATE TABLE IF NOT EXISTS miningcheck_miner_offers ( + id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + project_key VARCHAR(64) NOT NULL, + label VARCHAR(120) NOT NULL, + runtime_months INT NULL, + mining_speed_value DECIMAL(20,4) NULL, + mining_speed_unit VARCHAR(8) NULL, + bonus_speed_value DECIMAL(20,4) NULL, + bonus_speed_unit VARCHAR(8) NULL, + base_price_amount DECIMAL(20,8) NOT NULL, + base_price_currency VARCHAR(10) NOT NULL, + payment_type VARCHAR(10) NOT NULL DEFAULT 'fiat', + auto_renew TINYINT(1) NOT NULL DEFAULT 0, + note TEXT, + is_active TINYINT(1) NOT NULL DEFAULT 1, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT fk_mining_miner_offers_project FOREIGN KEY (project_key) REFERENCES miningcheck_projects(project_key) ON DELETE CASCADE, + CONSTRAINT fk_mining_miner_offers_base_price_currency_currency FOREIGN KEY (base_price_currency) REFERENCES miningcheck_currencies(code) +); + CREATE TABLE IF NOT EXISTS miningcheck_targets ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, project_key VARCHAR(64) NOT NULL, @@ -156,27 +177,6 @@ CREATE TABLE IF NOT EXISTS miningcheck_dashboard_definitions ( CONSTRAINT uq_mining_dashboards_project_name UNIQUE (project_key, name) ); -CREATE TABLE IF NOT EXISTS miningcheck_miner_offers ( - id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - project_key VARCHAR(64) NOT NULL, - label VARCHAR(120) NOT NULL, - runtime_months INT NULL, - mining_speed_value DECIMAL(20,4) NULL, - mining_speed_unit VARCHAR(8) NULL, - bonus_speed_value DECIMAL(20,4) NULL, - bonus_speed_unit VARCHAR(8) NULL, - base_price_amount DECIMAL(20,8) NOT NULL, - base_price_currency VARCHAR(10) NOT NULL, - payment_type VARCHAR(10) NOT NULL DEFAULT 'fiat', - auto_renew TINYINT(1) NOT NULL DEFAULT 0, - note TEXT, - is_active TINYINT(1) NOT NULL DEFAULT 1, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT fk_mining_miner_offers_project FOREIGN KEY (project_key) REFERENCES miningcheck_projects(project_key) ON DELETE CASCADE, - CONSTRAINT fk_mining_miner_offers_base_price_currency_currency FOREIGN KEY (base_price_currency) REFERENCES miningcheck_currencies(code) -); - CREATE TABLE IF NOT EXISTS miningcheck_purchased_miners ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, project_key VARCHAR(64) NOT NULL, diff --git a/modules/mining-checker/src/Infrastructure/SchemaManager.php b/modules/mining-checker/src/Infrastructure/SchemaManager.php index c76993b..05d6c08 100644 --- a/modules/mining-checker/src/Infrastructure/SchemaManager.php +++ b/modules/mining-checker/src/Infrastructure/SchemaManager.php @@ -118,15 +118,7 @@ final class SchemaManager public function schemaStatus(): array { - $requiredTables = [ - $this->prefix . 'projects', - $this->prefix . 'currencies', - $this->prefix . 'settings', - $this->prefix . 'cost_plans', - $this->prefix . 'measurements', - $this->prefix . 'targets', - $this->prefix . 'dashboard_definitions', - ]; + $requiredTables = $this->knownTablesInCreateOrder(); $presentTables = $this->existingTables($requiredTables); $missingTables = array_values(array_diff($requiredTables, $presentTables)); @@ -1259,7 +1251,26 @@ final class SchemaManager private function knownTablesInDropOrder(): array { - $allTables = array_merge($this->coreTables(), $this->extraTables()); - return array_reverse($allTables); + return array_reverse($this->knownTablesInCreateOrder()); + } + + private function knownTablesInCreateOrder(): array + { + return [ + $this->prefix . 'projects', + $this->prefix . 'currencies', + $this->prefix . 'currency_aliases', + $this->prefix . 'settings', + $this->prefix . 'cost_plans', + $this->prefix . 'measurements', + $this->prefix . 'measurement_rates', + $this->prefix . 'payouts', + $this->prefix . 'miner_offers', + $this->prefix . 'targets', + $this->prefix . 'dashboard_definitions', + $this->prefix . 'purchased_miners', + $this->prefix . 'fx_fetches', + $this->prefix . 'fx_rates', + ]; } }