v2.0.0.1
Publisium
- SET NAMES utf8mb4;
- SET time_zone = '+00:00';
- SET FOREIGN_KEY_CHECKS = 0;
-
- CREATE TABLE IF NOT EXISTS user_accounts (
- id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
- email VARCHAR(190) NOT NULL,
- password_hash VARCHAR(255) NOT NULL,
- display_name VARCHAR(120) NULL,
- avatar_path VARCHAR(255) NULL,
- email_verified_at DATETIME NULL,
- status ENUM('active','suspended','deleted') NOT NULL DEFAULT 'active',
- last_login_at DATETIME NULL,
- created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
- updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- UNIQUE KEY uq_user_email (email)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
- CREATE TABLE IF NOT EXISTS user_sessions (
- id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
- user_account_id INT UNSIGNED NOT NULL,
- session_token VARCHAR(128) NOT NULL,
- ip_address VARCHAR(64) NULL,
- user_agent VARCHAR(255) NULL,
- expires_at DATETIME NOT NULL,
- created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
- UNIQUE KEY uq_user_session_token (session_token),
- KEY idx_user_session_account (user_account_id),
- CONSTRAINT fk_user_session_account FOREIGN KEY (user_account_id) REFERENCES user_accounts(id) ON DELETE CASCADE
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
- CREATE TABLE IF NOT EXISTS user_remember_tokens (
- id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
- user_account_id INT UNSIGNED NOT NULL,
- token_hash CHAR(64) NOT NULL,
- expires_at DATETIME NOT NULL,
- rotated_at DATETIME NULL,
- ip_address VARCHAR(45) NULL,
- user_agent VARCHAR(255) NULL,
- created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
- UNIQUE KEY uq_remember_token_hash (token_hash),
- KEY idx_remember_account (user_account_id),
- KEY idx_remember_expires (expires_at),
- KEY idx_remember_rotated (rotated_at),
- CONSTRAINT fk_remember_account FOREIGN KEY (user_account_id) REFERENCES user_accounts(id) ON DELETE CASCADE
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
- CREATE TABLE IF NOT EXISTS user_consents (
- id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
- user_account_id INT UNSIGNED NOT NULL,
- consent_type VARCHAR(60) NOT NULL,
- is_granted TINYINT(1) NOT NULL DEFAULT 0,
- granted_at DATETIME NULL,
- revoked_at DATETIME NULL,
- created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
- KEY idx_consent_account (user_account_id),
- CONSTRAINT fk_consent_account FOREIGN KEY (user_account_id) REFERENCES user_accounts(id) ON DELETE CASCADE
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
- CREATE TABLE IF NOT EXISTS subscriptions (
- id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
- user_account_id INT UNSIGNED NOT NULL,
- provider VARCHAR(60) NOT NULL,
- provider_customer_id VARCHAR(190) NULL,
- provider_subscription_id VARCHAR(190) NULL,
- plan_code VARCHAR(60) NULL,
- status ENUM('active','trialing','past_due','canceled','expired') NOT NULL DEFAULT 'active',
- current_period_end DATETIME NULL,
- canceled_at DATETIME NULL,
- created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
- updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- KEY idx_subscription_account (user_account_id),
- KEY idx_subscription_provider_ref (provider, provider_subscription_id),
- CONSTRAINT fk_subscription_account FOREIGN KEY (user_account_id) REFERENCES user_accounts(id) ON DELETE CASCADE
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
- CREATE TABLE IF NOT EXISTS article_purchases (
- id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
- user_account_id INT UNSIGNED NOT NULL,
- article_id INT UNSIGNED NOT NULL,
- provider VARCHAR(60) NOT NULL,
- provider_payment_id VARCHAR(190) NULL,
- amount_cents INT UNSIGNED NOT NULL,
- currency CHAR(3) NOT NULL DEFAULT 'USD',
- status ENUM('pending','completed','refunded','failed') NOT NULL DEFAULT 'pending',
- created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
- KEY idx_purchase_account (user_account_id),
- KEY idx_purchase_article (article_id),
- CONSTRAINT fk_purchase_account FOREIGN KEY (user_account_id) REFERENCES user_accounts(id) ON DELETE CASCADE
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
- CREATE TABLE IF NOT EXISTS payment_webhook_events (
- id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
- provider VARCHAR(60) NOT NULL,
- event_id VARCHAR(190) NOT NULL,
- event_type VARCHAR(120) NOT NULL,
- payload LONGTEXT NOT NULL,
- processing_status ENUM('received','processed','failed','ignored') NOT NULL DEFAULT 'received',
- processing_error VARCHAR(500) NULL,
- received_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
- processed_at DATETIME NULL,
- UNIQUE KEY uq_webhook_provider_event (provider, event_id),
- KEY idx_webhook_status (processing_status)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
- CREATE TABLE IF NOT EXISTS comments (
- id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
- article_id INT UNSIGNED NOT NULL,
- user_account_id INT UNSIGNED NULL,
- parent_id INT UNSIGNED NULL,
- external_thread_id VARCHAR(190) NULL,
- body TEXT NULL,
- status ENUM('visible','hidden','flagged') NOT NULL DEFAULT 'visible',
- created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
- KEY idx_comment_article (article_id),
- KEY idx_comment_parent (parent_id),
- CONSTRAINT fk_comment_account FOREIGN KEY (user_account_id) REFERENCES user_accounts(id) ON DELETE SET NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
- SET FOREIGN_KEY_CHECKS = 1;
-