WebOrbiton
v1.0.0.1

StocketBase

182 lines · 8.1 KB
  1. SET NAMES utf8mb4;
  2. SET time_zone = '+00:00';
  3. SET FOREIGN_KEY_CHECKS = 0;
  4. ​
  5. CREATE TABLE IF NOT EXISTS user_accounts (
  6. id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  7. email VARCHAR(190) NOT NULL,
  8. password_hash VARCHAR(255) NOT NULL,
  9. display_name VARCHAR(120) NULL,
  10. avatar_path VARCHAR(255) NULL,
  11. email_verified_at DATETIME NULL,
  12. status ENUM('active','suspended','deleted') NOT NULL DEFAULT 'active',
  13. last_login_at DATETIME NULL,
  14. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  15. updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  16. UNIQUE KEY uq_user_email (email)
  17. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  18. ​
  19. CREATE TABLE IF NOT EXISTS user_sessions (
  20. id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  21. user_account_id INT UNSIGNED NOT NULL,
  22. session_token VARCHAR(128) NOT NULL,
  23. ip_address VARCHAR(64) NULL,
  24. user_agent VARCHAR(255) NULL,
  25. expires_at DATETIME NOT NULL,
  26. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  27. UNIQUE KEY uq_user_session_token (session_token),
  28. KEY idx_user_session_account (user_account_id),
  29. CONSTRAINT fk_user_session_account FOREIGN KEY (user_account_id) REFERENCES user_accounts(id) ON DELETE CASCADE
  30. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  31. ​
  32. CREATE TABLE IF NOT EXISTS user_consents (
  33. id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  34. user_account_id INT UNSIGNED NOT NULL,
  35. consent_type VARCHAR(60) NOT NULL,
  36. is_granted TINYINT(1) NOT NULL DEFAULT 0,
  37. granted_at DATETIME NULL,
  38. revoked_at DATETIME NULL,
  39. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  40. KEY idx_consent_account (user_account_id),
  41. CONSTRAINT fk_consent_account FOREIGN KEY (user_account_id) REFERENCES user_accounts(id) ON DELETE CASCADE
  42. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  43. ​
  44. CREATE TABLE IF NOT EXISTS subscriptions (
  45. id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  46. user_account_id INT UNSIGNED NOT NULL,
  47. product_id INT UNSIGNED NULL,
  48. provider VARCHAR(60) NOT NULL,
  49. provider_customer_id VARCHAR(190) NULL,
  50. provider_subscription_id VARCHAR(190) NULL,
  51. plan_code VARCHAR(60) NULL,
  52. status ENUM('active','trialing','past_due','canceled','expired') NOT NULL DEFAULT 'active',
  53. current_period_end DATETIME NULL,
  54. canceled_at DATETIME NULL,
  55. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  56. updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  57. KEY idx_subscription_account (user_account_id),
  58. KEY idx_subscription_provider_ref (provider, provider_subscription_id),
  59. CONSTRAINT fk_subscription_account FOREIGN KEY (user_account_id) REFERENCES user_accounts(id) ON DELETE CASCADE
  60. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  61. ​
  62. CREATE TABLE IF NOT EXISTS orders (
  63. id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  64. order_number VARCHAR(40) NOT NULL,
  65. user_account_id INT UNSIGNED NULL,
  66. guest_email VARCHAR(190) NULL,
  67. status ENUM('pending','paid','processing','fulfilled','shipped','completed','canceled','refunded','failed') NOT NULL DEFAULT 'pending',
  68. provider VARCHAR(60) NULL,
  69. provider_checkout_id VARCHAR(190) NULL,
  70. provider_payment_id VARCHAR(190) NULL,
  71. provider_customer_id VARCHAR(190) NULL,
  72. currency CHAR(3) NOT NULL DEFAULT 'USD',
  73. subtotal_cents INT UNSIGNED NOT NULL DEFAULT 0,
  74. discount_cents INT UNSIGNED NOT NULL DEFAULT 0,
  75. shipping_cents INT UNSIGNED NOT NULL DEFAULT 0,
  76. tax_cents INT UNSIGNED NOT NULL DEFAULT 0,
  77. total_cents INT UNSIGNED NOT NULL DEFAULT 0,
  78. discount_code VARCHAR(60) NULL,
  79. shipping_name VARCHAR(190) NULL,
  80. shipping_address_line1 VARCHAR(255) NULL,
  81. shipping_address_line2 VARCHAR(255) NULL,
  82. shipping_city VARCHAR(120) NULL,
  83. shipping_region VARCHAR(120) NULL,
  84. shipping_postal_code VARCHAR(30) NULL,
  85. shipping_country CHAR(2) NULL,
  86. billing_same_as_shipping TINYINT(1) NOT NULL DEFAULT 1,
  87. billing_name VARCHAR(190) NULL,
  88. billing_address_line1 VARCHAR(255) NULL,
  89. billing_address_line2 VARCHAR(255) NULL,
  90. billing_city VARCHAR(120) NULL,
  91. billing_region VARCHAR(120) NULL,
  92. billing_postal_code VARCHAR(30) NULL,
  93. billing_country CHAR(2) NULL,
  94. customer_note TEXT NULL,
  95. tracking_number VARCHAR(190) NULL,
  96. tracking_url VARCHAR(255) NULL,
  97. fulfilled_at DATETIME NULL,
  98. shipped_at DATETIME NULL,
  99. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  100. updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  101. UNIQUE KEY uq_order_number (order_number),
  102. KEY idx_order_account (user_account_id),
  103. KEY idx_order_status (status),
  104. KEY idx_order_provider_checkout (provider, provider_checkout_id),
  105. CONSTRAINT fk_order_account FOREIGN KEY (user_account_id) REFERENCES user_accounts(id) ON DELETE SET NULL
  106. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  107. ​
  108. CREATE TABLE IF NOT EXISTS order_items (
  109. id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  110. order_id INT UNSIGNED NOT NULL,
  111. product_id INT UNSIGNED NOT NULL,
  112. variant_id INT UNSIGNED NULL,
  113. product_title_snapshot VARCHAR(255) NOT NULL,
  114. variant_name_snapshot VARCHAR(120) NULL,
  115. unit_price_cents INT UNSIGNED NOT NULL,
  116. quantity INT UNSIGNED NOT NULL DEFAULT 1,
  117. total_cents INT UNSIGNED NOT NULL,
  118. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  119. KEY idx_order_item_order (order_id),
  120. KEY idx_order_item_product (product_id),
  121. CONSTRAINT fk_order_item_order FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE
  122. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  123. ​
  124. CREATE TABLE IF NOT EXISTS order_status_history (
  125. id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  126. order_id INT UNSIGNED NOT NULL,
  127. status VARCHAR(30) NOT NULL,
  128. note VARCHAR(500) NULL,
  129. changed_by_team_account_id INT UNSIGNED NULL,
  130. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  131. KEY idx_order_history_order (order_id),
  132. CONSTRAINT fk_order_history_order FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE
  133. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  134. ​
  135. CREATE TABLE IF NOT EXISTS payment_webhook_events (
  136. id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  137. provider VARCHAR(60) NOT NULL,
  138. event_id VARCHAR(190) NOT NULL,
  139. event_type VARCHAR(120) NOT NULL,
  140. payload LONGTEXT NOT NULL,
  141. processing_status ENUM('received','processed','failed','ignored') NOT NULL DEFAULT 'received',
  142. processing_error VARCHAR(500) NULL,
  143. received_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  144. processed_at DATETIME NULL,
  145. UNIQUE KEY uq_webhook_provider_event (provider, event_id),
  146. KEY idx_webhook_status (processing_status)
  147. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  148. ​
  149. CREATE TABLE IF NOT EXISTS product_reviews (
  150. id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  151. product_id INT UNSIGNED NOT NULL,
  152. user_account_id INT UNSIGNED NULL,
  153. parent_id INT UNSIGNED NULL,
  154. external_thread_id VARCHAR(190) NULL,
  155. rating TINYINT UNSIGNED NULL,
  156. body TEXT NULL,
  157. status ENUM('visible','hidden','flagged') NOT NULL DEFAULT 'visible',
  158. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  159. KEY idx_review_product (product_id),
  160. KEY idx_review_parent (parent_id),
  161. CONSTRAINT fk_review_account FOREIGN KEY (user_account_id) REFERENCES user_accounts(id) ON DELETE SET NULL
  162. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  163. ​
  164. CREATE TABLE IF NOT EXISTS download_grants (
  165. id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  166. token CHAR(64) NOT NULL,
  167. product_id INT UNSIGNED NOT NULL,
  168. order_id INT UNSIGNED NULL,
  169. user_account_id INT UNSIGNED NULL,
  170. email VARCHAR(190) NULL,
  171. download_count INT UNSIGNED NOT NULL DEFAULT 0,
  172. max_downloads INT UNSIGNED NULL,
  173. expires_at DATETIME NULL,
  174. revoked_at DATETIME NULL,
  175. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  176. UNIQUE KEY uq_download_token (token),
  177. KEY idx_download_order (order_id),
  178. KEY idx_download_product (product_id)
  179. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  180. ​
  181. SET FOREIGN_KEY_CHECKS = 1;
  182. ​