-- ============================================================================== -- 🗄️ Nabeh SaaS Subscriptions & WooCommerce Integration Schema Additions -- ============================================================================== -- 1. Subscription Plans Table CREATE TABLE IF NOT EXISTS `subscription_plans` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `price` DECIMAL(10, 2) NOT NULL, `billing_cycle` ENUM('monthly', 'yearly') DEFAULT 'monthly', `max_sessions` INT DEFAULT 1, `max_requests` INT DEFAULT 1000, `max_voice_requests` INT DEFAULT 0, `max_ocr_requests` INT DEFAULT 0, `features` JSON NULL COMMENT 'Enabled features flags and limits detail', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 2. Company Subscriptions Table CREATE TABLE IF NOT EXISTS `company_subscriptions` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `company_id` INT NOT NULL, `plan_id` INT NOT NULL, `status` ENUM('active', 'trialing', 'canceled', 'expired', 'past_due', 'pending_approval') DEFAULT 'active', `starts_at` TIMESTAMP NOT NULL, `ends_at` TIMESTAMP NOT NULL, `canceled_at` TIMESTAMP NULL DEFAULT NULL, `payment_gateway` VARCHAR(50) NULL, `payment_method` VARCHAR(50) NULL COMMENT 'paymob, cliq, binance', `receipt_reference` VARCHAR(255) NULL COMMENT 'External transaction ID or receipt URL', `subscription_ref` VARCHAR(255) NULL COMMENT 'External subscription ID reference', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (`company_id`) REFERENCES `companies`(`id`) ON DELETE CASCADE, FOREIGN KEY (`plan_id`) REFERENCES `subscription_plans`(`id`) ON DELETE RESTRICT, INDEX `idx_sub_status` (`status`), INDEX `idx_sub_dates` (`starts_at`, `ends_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 3. Company Subscription Usage Stats Table (Consolidated for fast checking) CREATE TABLE IF NOT EXISTS `company_subscription_usage` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `company_id` INT NOT NULL, `billing_start` DATE NOT NULL, `billing_end` DATE NOT NULL, `request_count` INT DEFAULT 0, `voice_count` INT DEFAULT 0, `ocr_count` INT DEFAULT 0, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY `unique_company_billing_period` (`company_id`, `billing_start`, `billing_end`), FOREIGN KEY (`company_id`) REFERENCES `companies`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 4. WooCommerce Stores Integration Table CREATE TABLE IF NOT EXISTS `woocommerce_stores` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `company_id` INT NOT NULL, `store_url` VARCHAR(512) NOT NULL, `consumer_key` TEXT NOT NULL COMMENT 'AES-256-GCM Encrypted WooCommerce API Consumer Key', `consumer_secret` TEXT NOT NULL COMMENT 'AES-256-GCM Encrypted WooCommerce API Consumer Secret', `webhook_secret` VARCHAR(255) NULL COMMENT 'Used to verify signature of incoming webhooks', `is_active` TINYINT(1) DEFAULT 1, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (`company_id`) REFERENCES `companies`(`id`) ON DELETE CASCADE, INDEX `idx_wc_active` (`is_active`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ============================================================================== -- 🔌 Seed Default Subscription Plans & Setup Simulation Tenancies -- ============================================================================== INSERT INTO `subscription_plans` (`id`, `name`, `price`, `billing_cycle`, `max_sessions`, `max_requests`, `max_voice_requests`, `max_ocr_requests`, `features`) VALUES (1, 'Starter', 19.00, 'monthly', 1, 1000, 0, 0, '{"voice": false, "ocr": false, "integrations": []}'), (2, 'Growth', 49.00, 'monthly', 2, 5000, 500, 500, '{"voice": true, "ocr": true, "integrations": ["salla", "woocommerce"]}'), (3, 'Professional', 99.00, 'monthly', 5, 15000, 2000, 2000, '{"voice": true, "ocr": true, "integrations": ["salla", "woocommerce", "custom_api"]}') ON DUPLICATE KEY UPDATE `name` = VALUES(`name`), `price` = VALUES(`price`), `max_requests` = VALUES(`max_requests`), `max_voice_requests` = VALUES(`max_voice_requests`), `max_ocr_requests` = VALUES(`max_ocr_requests`), `features` = VALUES(`features`);