Files
nabeh/backend/create_saas_and_woocommerce_tables.sql
2026-05-22 23:55:19 +03:00

77 lines
4.4 KiB
SQL

-- ==============================================================================
-- 🗄️ 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') DEFAULT 'active',
`starts_at` TIMESTAMP NOT NULL,
`ends_at` TIMESTAMP NOT NULL,
`canceled_at` TIMESTAMP NULL DEFAULT NULL,
`payment_gateway` VARCHAR(50) NULL,
`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`);