| CREATE TABLE `access_tokens` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `name` varchar(100) NOT NULL, | |
| `token` varchar(255) NOT NULL, | |
| `permissions` json NOT NULL, | |
| `ip_restrictions` text, | |
| `expires_at` datetime DEFAULT NULL, | |
| `status` enum('active','revoked') DEFAULT 'active', | |
| `is_revoked` tinyint(1) DEFAULT '0', | |
| `last_used` timestamp NULL DEFAULT NULL, | |
| `usage_count` int DEFAULT '0', | |
| `metadata` json DEFAULT NULL, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `idx_token_value` (`token`), | |
| KEY `idx_user_id` (`user_id`), | |
| KEY `idx_expires_at` (`expires_at`), | |
| CONSTRAINT `access_tokens_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `admin_payments` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int DEFAULT NULL, | |
| `amount` decimal(10,2) DEFAULT NULL, | |
| `mpesa_code` varchar(20) DEFAULT NULL, | |
| `phone_number` varchar(20) DEFAULT NULL, | |
| `status` enum('pending','verified','rejected') DEFAULT 'pending', | |
| `verified_by` int DEFAULT NULL, | |
| `verified_at` timestamp NULL DEFAULT NULL, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| CONSTRAINT `admin_payments_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `advertisement_payments` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `advertisement_id` int NOT NULL, | |
| `user_id` int NOT NULL, | |
| `amount` decimal(10,2) NOT NULL, | |
| `payment_method` enum('mpesa','bank_transfer','wallet','card') DEFAULT 'mpesa', | |
| `transaction_code` varchar(100) DEFAULT NULL, | |
| `status` enum('pending','completed','failed','refunded') DEFAULT 'pending', | |
| `payment_date` timestamp NULL DEFAULT NULL, | |
| `confirmed_by` int DEFAULT NULL, | |
| `confirmed_at` timestamp NULL DEFAULT NULL, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `advertisement_id` (`advertisement_id`), | |
| KEY `user_id` (`user_id`), | |
| KEY `confirmed_by` (`confirmed_by`), | |
| CONSTRAINT `advertisement_payments_ibfk_1` FOREIGN KEY (`advertisement_id`) REFERENCES `advertisements` (`id`), | |
| CONSTRAINT `advertisement_payments_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `advertisement_payments_ibfk_3` FOREIGN KEY (`confirmed_by`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `advertisements` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `agent_id` int DEFAULT NULL, | |
| `title` varchar(255) NOT NULL, | |
| `description` text, | |
| `image_url` varchar(500) DEFAULT NULL, | |
| `video_url` varchar(500) DEFAULT NULL, | |
| `target_platform` enum('facebook','instagram','whatsapp','twitter','all') DEFAULT 'all', | |
| `budget` decimal(10,2) NOT NULL, | |
| `duration_days` int DEFAULT '7', | |
| `status` enum('pending','approved','rejected','active','completed','paused') DEFAULT 'pending', | |
| `admin_notes` text, | |
| `approved_by` int DEFAULT NULL, | |
| `approved_at` timestamp NULL DEFAULT NULL, | |
| `start_date` date DEFAULT NULL, | |
| `end_date` date DEFAULT NULL, | |
| `impressions` int DEFAULT '0', | |
| `clicks` int DEFAULT '0', | |
| `conversions` int DEFAULT '0', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| KEY `agent_id` (`agent_id`), | |
| KEY `approved_by` (`approved_by`), | |
| CONSTRAINT `advertisements_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `advertisements_ibfk_2` FOREIGN KEY (`agent_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `advertisements_ibfk_3` FOREIGN KEY (`approved_by`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `agent_applications` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `sponsor_id` int NOT NULL, | |
| `full_name` varchar(255) NOT NULL, | |
| `phone` varchar(20) NOT NULL, | |
| `email` varchar(255) DEFAULT NULL, | |
| `location` varchar(255) NOT NULL, | |
| `id_front` varchar(500) DEFAULT NULL, | |
| `id_back` varchar(500) DEFAULT NULL, | |
| `status` enum('pending','approved','rejected','documents_needed') DEFAULT 'pending', | |
| `applied_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `reviewed_by` int DEFAULT NULL, | |
| `reviewed_at` timestamp NULL DEFAULT NULL, | |
| `review_notes` text, | |
| `commission_rate` decimal(5,2) DEFAULT '10.00', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| KEY `sponsor_id` (`sponsor_id`), | |
| KEY `reviewed_by` (`reviewed_by`), | |
| CONSTRAINT `agent_applications_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `agent_applications_ibfk_2` FOREIGN KEY (`sponsor_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `agent_applications_ibfk_3` FOREIGN KEY (`reviewed_by`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `agent_claims` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `claim_type` enum('commission','bonus','referral','override','other') NOT NULL, | |
| `amount` decimal(15,2) NOT NULL, | |
| `description` text, | |
| `claim_period` varchar(50) DEFAULT NULL, | |
| `status` enum('pending','approved','rejected','processing') DEFAULT 'pending', | |
| `approved_by` int DEFAULT NULL, | |
| `approved_amount` decimal(15,2) DEFAULT NULL, | |
| `approval_notes` text, | |
| `approved_at` datetime DEFAULT NULL, | |
| `supporting_docs` json DEFAULT NULL, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `approved_by` (`approved_by`), | |
| KEY `idx_user_id` (`user_id`), | |
| KEY `idx_status` (`status`), | |
| KEY `idx_created_at` (`created_at`), | |
| CONSTRAINT `agent_claims_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, | |
| CONSTRAINT `agent_claims_ibfk_2` FOREIGN KEY (`approved_by`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `agent_hierarchy` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `upline_id` int NOT NULL, | |
| `downline_id` int NOT NULL, | |
| `level` int NOT NULL, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `upline_id` (`upline_id`), | |
| KEY `downline_id` (`downline_id`), | |
| CONSTRAINT `agent_hierarchy_ibfk_1` FOREIGN KEY (`upline_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `agent_hierarchy_ibfk_2` FOREIGN KEY (`downline_id`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `agents` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `full_name` varchar(100) NOT NULL, | |
| `phone` varchar(20) NOT NULL, | |
| `location` varchar(100) NOT NULL, | |
| `id_front` varchar(255) DEFAULT NULL, | |
| `id_back` varchar(255) DEFAULT NULL, | |
| `status` enum('pending','approved','rejected','documents_needed') DEFAULT 'pending', | |
| `applied_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `reviewed_at` timestamp NULL DEFAULT NULL, | |
| `reviewed_by` int DEFAULT NULL, | |
| `notes` text, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| KEY `reviewed_by` (`reviewed_by`), | |
| CONSTRAINT `agents_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `agents_ibfk_2` FOREIGN KEY (`reviewed_by`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `audit_logs` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int DEFAULT NULL, | |
| `action` varchar(100) NOT NULL, | |
| `description` text, | |
| `ip_address` varchar(45) DEFAULT NULL, | |
| `user_agent` text, | |
| `metadata` json DEFAULT NULL, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `balance_history` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `transaction_id` int DEFAULT NULL, | |
| `amount` decimal(10,2) NOT NULL, | |
| `balance_before` decimal(10,2) NOT NULL, | |
| `balance_after` decimal(10,2) NOT NULL, | |
| `type` enum('transfer_sent','transfer_received','deposit','withdrawal') DEFAULT NULL, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| KEY `transaction_id` (`transaction_id`), | |
| CONSTRAINT `balance_history_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `balance_history_ibfk_2` FOREIGN KEY (`transaction_id`) REFERENCES `transactions` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `commissions` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `upline_id` int NOT NULL, | |
| `downline_id` int NOT NULL, | |
| `advertisement_id` int NOT NULL, | |
| `amount` decimal(10,2) NOT NULL, | |
| `commission_rate` decimal(5,2) NOT NULL, | |
| `commission_amount` decimal(10,2) NOT NULL, | |
| `percentage` decimal(5,2) NOT NULL, | |
| `description` varchar(255) DEFAULT NULL, | |
| `status` enum('pending','paid','cancelled') DEFAULT 'pending', | |
| `paid_at` timestamp NULL DEFAULT NULL, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `upline_id` (`upline_id`), | |
| KEY `downline_id` (`downline_id`), | |
| KEY `fk_commission_advertisement` (`advertisement_id`), | |
| CONSTRAINT `commissions_ibfk_1` FOREIGN KEY (`upline_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `commissions_ibfk_2` FOREIGN KEY (`downline_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `fk_commission_advertisement` FOREIGN KEY (`advertisement_id`) REFERENCES `advertisements` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `currency_rates` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `base_currency` varchar(3) DEFAULT 'KES', | |
| `target_currency` varchar(3) DEFAULT NULL, | |
| `exchange_rate` decimal(10,4) DEFAULT NULL, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`) | |
| ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `daily_earnings` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `investment_id` int NOT NULL, | |
| `user_id` int NOT NULL, | |
| `amount` decimal(15,2) NOT NULL, | |
| `earning_date` date NOT NULL, | |
| `status` enum('pending','paid','reinvested') DEFAULT 'pending', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `investment_id` (`investment_id`), | |
| KEY `user_id` (`user_id`), | |
| CONSTRAINT `daily_earnings_ibfk_1` FOREIGN KEY (`investment_id`) REFERENCES `user_investments` (`id`), | |
| CONSTRAINT `daily_earnings_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `daily_token_stats` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `date` date NOT NULL, | |
| `tokens_generated` int DEFAULT '0', | |
| `tokens_revoked` int DEFAULT '0', | |
| `api_calls` int DEFAULT '0', | |
| `total_processing_time_ms` int DEFAULT '0', | |
| `unique_endpoints` int DEFAULT '0', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| UNIQUE KEY `unique_user_date` (`user_id`,`date`), | |
| KEY `idx_date` (`date`), | |
| CONSTRAINT `daily_token_stats_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `eligibility_criteria` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `min_deposit_amount` decimal(15,2) DEFAULT '20000.00', | |
| `min_account_age_months` int DEFAULT '6', | |
| `min_successful_uploads` int DEFAULT '10', | |
| `is_active` tinyint(1) DEFAULT '1', | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| `cooling_period_days` int DEFAULT '30', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`) | |
| ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `faqs` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `question` text NOT NULL, | |
| `answer` text NOT NULL, | |
| `category` varchar(50) DEFAULT NULL, | |
| `is_active` tinyint(1) DEFAULT '1', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`) | |
| ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `ledger` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `change_amount` decimal(15,2) NOT NULL, | |
| `balance_after` decimal(15,2) NOT NULL, | |
| `type` enum('deposit','withdrawal','transfer','reward','fee') NOT NULL, | |
| `reference` varchar(100) NOT NULL, | |
| `description` text, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| CONSTRAINT `ledger_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `loan_applications` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `amount` decimal(15,2) NOT NULL, | |
| `duration_days` int NOT NULL, | |
| `purpose` varchar(255) NOT NULL, | |
| `disbursement_method` enum('mpesa','bank','paypal') NOT NULL, | |
| `mpesa_phone` varchar(15) DEFAULT NULL, | |
| `bank_name` varchar(100) DEFAULT NULL, | |
| `account_number` varchar(50) DEFAULT NULL, | |
| `account_name` varchar(100) DEFAULT NULL, | |
| `paypal_email` varchar(100) DEFAULT NULL, | |
| `notification_number` varchar(15) NOT NULL, | |
| `status` enum('pending','approved','rejected','disbursed','completed') DEFAULT 'pending', | |
| `application_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `approval_date` timestamp NULL DEFAULT NULL, | |
| `due_date` date DEFAULT NULL, | |
| `processing_fee` decimal(15,2) DEFAULT '0.00', | |
| `interest_rate` decimal(5,2) DEFAULT '5.00', | |
| `total_repayment` decimal(15,2) DEFAULT '0.00', | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| CONSTRAINT `loan_applications_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `loan_repayments` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `loan_id` int NOT NULL, | |
| `due_date` date NOT NULL, | |
| `amount_due` decimal(15,2) NOT NULL, | |
| `amount_paid` decimal(15,2) DEFAULT '0.00', | |
| `status` enum('pending','partial','paid','overdue') DEFAULT 'pending', | |
| `payment_date` timestamp NULL DEFAULT NULL, | |
| PRIMARY KEY (`id`), | |
| KEY `loan_id` (`loan_id`), | |
| CONSTRAINT `loan_repayments_ibfk_1` FOREIGN KEY (`loan_id`) REFERENCES `loan_applications` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `loans` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `amount` decimal(15,2) NOT NULL, | |
| `interest_rate` decimal(5,2) NOT NULL, | |
| `duration_days` int NOT NULL, | |
| `purpose` text, | |
| `status` enum('pending','approved','rejected','active','paid') DEFAULT 'pending', | |
| `approved_by` int DEFAULT NULL, | |
| `approved_at` datetime DEFAULT NULL, | |
| `due_date` date DEFAULT NULL, | |
| `amount_paid` decimal(15,2) DEFAULT '0.00', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| KEY `approved_by` (`approved_by`), | |
| CONSTRAINT `loans_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, | |
| CONSTRAINT `loans_ibfk_2` FOREIGN KEY (`approved_by`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `main_account` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `account_name` varchar(100) DEFAULT 'JMotors Main Account', | |
| `paybill_number` varchar(20) DEFAULT '542542', | |
| `account_number` varchar(50) DEFAULT '00106664176150', | |
| `account_type` enum('paybill','bank','mpesa') DEFAULT 'paybill', | |
| `total_balance` decimal(15,2) DEFAULT '0.00', | |
| `total_deposits` decimal(15,2) DEFAULT '0.00', | |
| `total_withdrawals` decimal(15,2) DEFAULT '0.00', | |
| `currency` varchar(3) DEFAULT 'KES', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| `mpesa_phone` varchar(20) DEFAULT '0756709823', | |
| PRIMARY KEY (`id`) | |
| ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `meta_uploads` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `file_name` varchar(255) NOT NULL, | |
| `file_type` varchar(50) NOT NULL, | |
| `file_size` bigint NOT NULL, | |
| `file_path` varchar(500) NOT NULL, | |
| `upload_date` date NOT NULL, | |
| `status` enum('pending','approved','rejected') DEFAULT 'pending', | |
| `reward_amount` decimal(10,2) DEFAULT '0.00', | |
| `reviewed_by` int DEFAULT NULL, | |
| `reviewed_at` timestamp NULL DEFAULT NULL, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| KEY `reviewed_by` (`reviewed_by`), | |
| CONSTRAINT `meta_uploads_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `meta_uploads_ibfk_2` FOREIGN KEY (`reviewed_by`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `packages` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `name` varchar(50) NOT NULL, | |
| `min_investment` decimal(15,2) NOT NULL, | |
| `max_investment` decimal(15,2) NOT NULL, | |
| `daily_return` decimal(5,2) NOT NULL, | |
| `price` decimal(10,2) NOT NULL, | |
| `award` decimal(10,2) NOT NULL, | |
| `return_amount` decimal(10,2) NOT NULL, | |
| `duration_days` int NOT NULL, | |
| `referral_bonus` decimal(5,2) NOT NULL, | |
| `daily_return_percent` decimal(5,2) NOT NULL, | |
| `features` text, | |
| `is_active` tinyint(1) DEFAULT '1', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`) | |
| ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `pin_setup` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `pin_hash` varchar(255) NOT NULL, | |
| `setup_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| CONSTRAINT `pin_setup_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `products` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `name` varchar(100) NOT NULL, | |
| `value` decimal(15,2) NOT NULL, | |
| `package_requirement` varchar(50) DEFAULT 'all', | |
| `image_url` varchar(500) DEFAULT NULL, | |
| `stock` int DEFAULT '0', | |
| `description` text, | |
| `price` decimal(10,2) NOT NULL, | |
| `image_code` varchar(10) NOT NULL, | |
| `cashback_amount` decimal(10,2) DEFAULT '0.00', | |
| `is_active` tinyint(1) DEFAULT '1', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `recharge_transactions` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int DEFAULT NULL, | |
| `main_account_id` int DEFAULT NULL, | |
| `amount` decimal(10,2) DEFAULT NULL, | |
| `virtual_balance_before` decimal(10,2) DEFAULT NULL, | |
| `virtual_balance_after` decimal(10,2) DEFAULT NULL, | |
| `main_balance_before` decimal(10,2) DEFAULT NULL, | |
| `main_balance_after` decimal(10,2) DEFAULT NULL, | |
| `currency` varchar(3) DEFAULT 'KES', | |
| `payment_method` varchar(50) DEFAULT NULL, | |
| `phone_number` varchar(20) DEFAULT NULL, | |
| `mpesa_receipt` varchar(100) DEFAULT NULL, | |
| `transaction_id` varchar(100) DEFAULT NULL, | |
| `paybill_number` varchar(20) DEFAULT '542542', | |
| `account_number` varchar(50) DEFAULT '00106664176150', | |
| `status` enum('pending','completed','failed','verified') DEFAULT 'pending', | |
| `bonus_amount` decimal(10,2) DEFAULT '0.00', | |
| `verified_by` int DEFAULT NULL, | |
| `verified_at` timestamp NULL DEFAULT NULL, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| KEY `fk_recharge_main` (`main_account_id`), | |
| CONSTRAINT `fk_recharge_main` FOREIGN KEY (`main_account_id`) REFERENCES `main_account` (`id`), | |
| CONSTRAINT `recharge_transactions_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `referrals` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `referrer_id` int NOT NULL, | |
| `referred_id` int NOT NULL, | |
| `status` enum('pending','completed','cancelled') DEFAULT 'pending', | |
| `commission_earned` decimal(10,2) DEFAULT '0.00', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `referrer_id` (`referrer_id`), | |
| KEY `referred_id` (`referred_id`), | |
| CONSTRAINT `referrals_ibfk_1` FOREIGN KEY (`referrer_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `referrals_ibfk_2` FOREIGN KEY (`referred_id`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `reward_settings` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `setting_key` varchar(50) NOT NULL, | |
| `setting_value` varchar(255) NOT NULL, | |
| `description` text, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| UNIQUE KEY `setting_key` (`setting_key`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `reward_transactions` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `type` enum('upload','bonus','withdrawal') NOT NULL, | |
| `amount` decimal(10,2) NOT NULL, | |
| `description` varchar(255) DEFAULT NULL, | |
| `reference_id` int DEFAULT NULL, | |
| `status` enum('pending','completed','failed') DEFAULT 'completed', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| CONSTRAINT `reward_transactions_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `sessions` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `session_token` varchar(255) NOT NULL, | |
| `ip_address` varchar(45) DEFAULT NULL, | |
| `user_agent` text, | |
| `expires_at` datetime NOT NULL, | |
| `is_active` tinyint(1) DEFAULT '1', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| UNIQUE KEY `session_token` (`session_token`), | |
| KEY `user_id` (`user_id`), | |
| CONSTRAINT `sessions_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `support_agents` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `name` varchar(100) NOT NULL, | |
| `email` varchar(255) NOT NULL, | |
| `phone` varchar(20) DEFAULT NULL, | |
| `department` varchar(50) DEFAULT NULL, | |
| `is_active` tinyint(1) DEFAULT '1', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| UNIQUE KEY `email` (`email`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `support_tickets` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int DEFAULT NULL, | |
| `ticket_number` varchar(20) NOT NULL, | |
| `issue_type` enum('technical','account','payment','product','other') NOT NULL, | |
| `subject` varchar(200) NOT NULL, | |
| `description` text NOT NULL, | |
| `status` enum('open','in_progress','resolved','closed') DEFAULT 'open', | |
| `priority` enum('low','medium','high','urgent') DEFAULT 'medium', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| UNIQUE KEY `ticket_number` (`ticket_number`), | |
| KEY `user_id` (`user_id`), | |
| CONSTRAINT `support_tickets_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `support_users` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `username` varchar(100) NOT NULL, | |
| `email` varchar(255) NOT NULL, | |
| `tier` varchar(50) DEFAULT NULL, | |
| `package` varchar(50) DEFAULT NULL, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `system_config` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `config_key` varchar(100) NOT NULL, | |
| `config_value` text NOT NULL, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| UNIQUE KEY `config_key` (`config_key`) | |
| ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `team_relationships` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `sponsor_id` int NOT NULL, | |
| `agent_id` int NOT NULL, | |
| `level` int NOT NULL, | |
| `status` enum('active','inactive') DEFAULT 'active', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| UNIQUE KEY `unique_relationship` (`sponsor_id`,`agent_id`), | |
| KEY `agent_id` (`agent_id`), | |
| CONSTRAINT `team_relationships_ibfk_1` FOREIGN KEY (`sponsor_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, | |
| CONSTRAINT `team_relationships_ibfk_2` FOREIGN KEY (`agent_id`) REFERENCES `users` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `ticket_assignments` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `ticket_id` int NOT NULL, | |
| `agent_id` int NOT NULL, | |
| `assigned_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `ticket_id` (`ticket_id`), | |
| KEY `agent_id` (`agent_id`), | |
| CONSTRAINT `ticket_assignments_ibfk_1` FOREIGN KEY (`ticket_id`) REFERENCES `support_tickets` (`id`) ON DELETE CASCADE, | |
| CONSTRAINT `ticket_assignments_ibfk_2` FOREIGN KEY (`agent_id`) REFERENCES `support_agents` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `ticket_responses` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `ticket_id` int NOT NULL, | |
| `responder_type` enum('user','support_agent') NOT NULL, | |
| `message` text NOT NULL, | |
| `attachments` text, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `ticket_id` (`ticket_id`), | |
| CONSTRAINT `ticket_responses_ibfk_1` FOREIGN KEY (`ticket_id`) REFERENCES `support_tickets` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `token_usage_logs` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `token_id` int NOT NULL, | |
| `user_id` int NOT NULL, | |
| `endpoint` varchar(100) NOT NULL, | |
| `ip_address` varchar(45) DEFAULT NULL, | |
| `user_agent` text, | |
| `request_method` varchar(10) DEFAULT NULL, | |
| `response_code` int DEFAULT NULL, | |
| `processing_time_ms` int DEFAULT NULL, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| KEY `idx_created_at` (`created_at`), | |
| KEY `idx_token_id` (`token_id`), | |
| CONSTRAINT `token_usage_logs_ibfk_1` FOREIGN KEY (`token_id`) REFERENCES `access_tokens` (`id`) ON DELETE CASCADE, | |
| CONSTRAINT `token_usage_logs_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `transactions` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `sender_id` int NOT NULL, | |
| `user_id` int NOT NULL, | |
| `type` enum('deposit','withdrawal','product_purchase','cashback') NOT NULL, | |
| `description` text, | |
| `balance_after` decimal(10,2) NOT NULL, | |
| `recipient_id` int NOT NULL, | |
| `amount` decimal(10,2) NOT NULL, | |
| `message` text, | |
| `transaction_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `reference` varchar(100) DEFAULT NULL, | |
| `status` enum('pending','completed','failed') DEFAULT 'pending', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `completed_at` timestamp NULL DEFAULT NULL, | |
| PRIMARY KEY (`id`), | |
| KEY `fk_sender` (`sender_id`), | |
| KEY `fk_recipient` (`recipient_id`), | |
| KEY `fk_transactions_user` (`user_id`), | |
| CONSTRAINT `fk_recipient` FOREIGN KEY (`recipient_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `fk_sender` FOREIGN KEY (`sender_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `fk_transactions_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, | |
| CONSTRAINT `transactions_ibfk_1` FOREIGN KEY (`sender_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `transactions_ibfk_2` FOREIGN KEY (`recipient_id`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `transaction_verifications` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `transaction_id` int DEFAULT NULL, | |
| `user_id` int DEFAULT NULL, | |
| `amount` decimal(10,2) DEFAULT NULL, | |
| `paybill_number` varchar(20) DEFAULT NULL, | |
| `account_number` varchar(50) DEFAULT NULL, | |
| `mpesa_receipt` varchar(100) DEFAULT NULL, | |
| `screenshot_path` varchar(255) DEFAULT NULL, | |
| `status` enum('pending','approved','rejected') DEFAULT 'pending', | |
| `reviewed_by` int DEFAULT NULL, | |
| `reviewed_at` timestamp NULL DEFAULT NULL, | |
| `notes` text, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `transaction_id` (`transaction_id`), | |
| KEY `user_id` (`user_id`), | |
| CONSTRAINT `transaction_verifications_ibfk_1` FOREIGN KEY (`transaction_id`) REFERENCES `recharge_transactions` (`id`), | |
| CONSTRAINT `transaction_verifications_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `upload_rewards` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `upload_date` date NOT NULL, | |
| `total_uploads` int DEFAULT '0', | |
| `completed_uploads` int DEFAULT '0', | |
| `total_reward` decimal(10,2) DEFAULT '0.00', | |
| `status` enum('pending','processed') DEFAULT 'pending', | |
| `processed_at` timestamp NULL DEFAULT NULL, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| UNIQUE KEY `unique_user_date` (`user_id`,`upload_date`), | |
| CONSTRAINT `upload_rewards_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `user_accounts` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int DEFAULT NULL, | |
| `virtual_account_number` varchar(50) DEFAULT NULL, | |
| `current_balance` decimal(15,2) DEFAULT '0.00', | |
| `total_invested` decimal(15,2) DEFAULT '0.00', | |
| `total_earnings` decimal(15,2) DEFAULT '0.00', | |
| `total_withdrawn` decimal(15,2) DEFAULT '0.00', | |
| `currency` varchar(3) DEFAULT 'KES', | |
| `status` enum('active','suspended','closed') DEFAULT 'active', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| UNIQUE KEY `virtual_account_number` (`virtual_account_number`), | |
| KEY `user_id` (`user_id`), | |
| CONSTRAINT `user_accounts_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `user_activity` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int DEFAULT NULL, | |
| `activity_type` varchar(50) DEFAULT NULL, | |
| `description` text, | |
| `ip_address` varchar(45) DEFAULT NULL, | |
| `timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| CONSTRAINT `user_activity_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `user_channel_subscriptions` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int DEFAULT NULL, | |
| `channel_id` int DEFAULT NULL, | |
| `subscribed_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| UNIQUE KEY `unique_subscription` (`user_id`,`channel_id`), | |
| KEY `channel_id` (`channel_id`), | |
| CONSTRAINT `user_channel_subscriptions_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, | |
| CONSTRAINT `user_channel_subscriptions_ibfk_2` FOREIGN KEY (`channel_id`) REFERENCES `whatsapp_channels` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `user_investments` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `package_id` int NOT NULL, | |
| `amount` decimal(15,2) NOT NULL, | |
| `start_date` datetime NOT NULL, | |
| `end_date` datetime NOT NULL, | |
| `status` enum('active','completed','cancelled') DEFAULT 'active', | |
| `total_earnings` decimal(15,2) DEFAULT '0.00', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| KEY `package_id` (`package_id`), | |
| CONSTRAINT `user_investments_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`), | |
| CONSTRAINT `user_investments_ibfk_2` FOREIGN KEY (`package_id`) REFERENCES `packages` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `user_packages` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `package_id` int NOT NULL, | |
| `purchase_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `start_date` datetime DEFAULT NULL, | |
| `end_date` datetime DEFAULT NULL, | |
| `amount_paid` decimal(10,2) DEFAULT NULL, | |
| `status` enum('active','completed','cancelled') DEFAULT 'active', | |
| `investment_amount` decimal(10,2) NOT NULL, | |
| `expected_return` decimal(10,2) NOT NULL, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| KEY `package_id` (`package_id`), | |
| CONSTRAINT `user_packages_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, | |
| CONSTRAINT `user_packages_ibfk_2` FOREIGN KEY (`package_id`) REFERENCES `packages` (`id`) | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `user_products` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `product_id` int NOT NULL, | |
| `assigned_date` date NOT NULL, | |
| `investment_id` int NOT NULL, | |
| `purchase_price` decimal(10,2) NOT NULL, | |
| `cashback_received` decimal(10,2) DEFAULT '0.00', | |
| `purchase_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `status` enum('active','completed','cancelled') DEFAULT 'active', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| KEY `product_id` (`product_id`), | |
| CONSTRAINT `user_products_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, | |
| CONSTRAINT `user_products_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `user_profiles` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `first_name` varchar(50) DEFAULT NULL, | |
| `last_name` varchar(50) DEFAULT NULL, | |
| `date_of_birth` date DEFAULT NULL, | |
| `gender` enum('Male','Female','Other') DEFAULT NULL, | |
| `profile_picture` varchar(255) DEFAULT NULL, | |
| `address` text, | |
| `city` varchar(50) DEFAULT NULL, | |
| `state` varchar(50) DEFAULT NULL, | |
| `zip_code` varchar(20) DEFAULT NULL, | |
| `bio` text, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| CONSTRAINT `user_profiles_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `users` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_type` enum('marketer','agent','admin') DEFAULT 'marketer', | |
| `referred_by` int DEFAULT NULL, | |
| `username` varchar(50) NOT NULL, | |
| `email` varchar(100) NOT NULL, | |
| `country` varchar(2) NOT NULL, | |
| `phone_number` varchar(20) NOT NULL, | |
| `tier` enum('Basic','Premium') DEFAULT 'Basic', | |
| `current_package_id` int DEFAULT NULL, | |
| `package_start_date` datetime DEFAULT NULL, | |
| `package_end_date` datetime DEFAULT NULL, | |
| `package` enum('None','NOVA','SUPERIOR','GOLD') DEFAULT 'None', | |
| `balance` decimal(10,2) DEFAULT '0.00', | |
| `verification_token` varchar(100) DEFAULT NULL, | |
| `reset_token` varchar(100) DEFAULT NULL, | |
| `reset_token_expiry` datetime DEFAULT NULL, | |
| `total_invested` decimal(15,2) DEFAULT '0.00', | |
| `total_earnings` decimal(15,2) DEFAULT '0.00', | |
| `total_deposits` decimal(10,2) DEFAULT '0.00', | |
| `total_withdrawals` decimal(10,2) DEFAULT '0.00', | |
| `rewards` decimal(10,2) DEFAULT '0.00', | |
| `meta_earnings` decimal(10,2) DEFAULT '0.00', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| `last_login` timestamp NULL DEFAULT NULL, | |
| `pin_hash` varchar(255) NOT NULL, | |
| `password_hash` varchar(255) NOT NULL, | |
| `currency` varchar(3) DEFAULT 'KES', | |
| `exchange_rate` decimal(10,4) DEFAULT '1.0000', | |
| `referral_code` varchar(20) DEFAULT NULL, | |
| PRIMARY KEY (`id`), | |
| UNIQUE KEY `username` (`username`), | |
| UNIQUE KEY `email` (`email`), | |
| UNIQUE KEY `referral_code` (`referral_code`), | |
| KEY `idx_users_email` (`email`), | |
| KEY `idx_users_username` (`username`) | |
| ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `user_security` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int DEFAULT NULL, | |
| `two_factor_enabled` tinyint(1) DEFAULT '0', | |
| `two_factor_secret` varchar(32) DEFAULT NULL, | |
| `password_reset_token` varchar(100) DEFAULT NULL, | |
| `reset_token_expires` timestamp NULL DEFAULT NULL, | |
| `login_attempts` int DEFAULT '0', | |
| `last_login_attempt` timestamp NULL DEFAULT NULL, | |
| PRIMARY KEY (`id`), | |
| UNIQUE KEY `user_id` (`user_id`), | |
| CONSTRAINT `user_security_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `user_settings` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int DEFAULT NULL, | |
| `dark_mode` tinyint(1) DEFAULT '1', | |
| `language` varchar(10) DEFAULT 'en', | |
| `currency` varchar(3) DEFAULT 'KES', | |
| `auto_logout` tinyint(1) DEFAULT '1', | |
| `email_notifications` tinyint(1) DEFAULT '1', | |
| `push_notifications` tinyint(1) DEFAULT '1', | |
| PRIMARY KEY (`id`), | |
| UNIQUE KEY `user_id` (`user_id`), | |
| CONSTRAINT `user_settings_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `whatsapp_channels` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `channel_name` varchar(100) NOT NULL, | |
| `channel_type` enum('group','channel','tips','elite') NOT NULL, | |
| `whatsapp_link` varchar(500) NOT NULL, | |
| `description` text, | |
| `icon_class` varchar(50) DEFAULT NULL, | |
| `color_class` varchar(50) DEFAULT NULL, | |
| `is_active` tinyint(1) DEFAULT '1', | |
| `member_count` int DEFAULT '0', | |
| `max_capacity` int DEFAULT '1000', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`) | |
| ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `withdrawal_destinations` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `type` enum('mpesa','bank','airtel','tkash') NOT NULL, | |
| `details` varchar(255) NOT NULL, | |
| `is_default` tinyint(1) DEFAULT '0', | |
| `is_active` tinyint(1) DEFAULT '1', | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| KEY `user_id` (`user_id`), | |
| CONSTRAINT `withdrawal_destinations_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE TABLE `withdrawals` ( | |
| `id` int NOT NULL AUTO_INCREMENT, | |
| `user_id` int NOT NULL, | |
| `destination_id` int NOT NULL, | |
| `amount` decimal(15,2) NOT NULL, | |
| `fee` decimal(15,2) NOT NULL DEFAULT '0.00', | |
| `net_amount` decimal(15,2) NOT NULL, | |
| `status` enum('pending','processing','completed','failed','cancelled') DEFAULT 'pending', | |
| `idempotency_key` varchar(255) NOT NULL, | |
| `reference` varchar(100) NOT NULL, | |
| `failure_reason` text, | |
| `processed_at` timestamp NULL DEFAULT NULL, | |
| `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| PRIMARY KEY (`id`), | |
| UNIQUE KEY `idempotency_key` (`idempotency_key`), | |
| KEY `user_id` (`user_id`), | |
| KEY `destination_id` (`destination_id`), | |
| CONSTRAINT `withdrawals_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, | |
| CONSTRAINT `withdrawals_ibfk_2` FOREIGN KEY (`destination_id`) REFERENCES `withdrawal_destinations` (`id`) ON DELETE CASCADE | |
| ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | |
| CREATE ALGORITHM=UNDEFINED | |
| DEFINER=`root`@`localhost` | |
| SQL SECURITY DEFINER | |
| VIEW `user_teams` AS | |
| SELECT | |
| `u`.`id` AS `user_id`, | |
| `u`.`username` AS `username`, | |
| `u`.`referral_code` AS `referral_code`, | |
| COUNT(`r`.`referred_id`) AS `team_size`, | |
| COALESCE(SUM(`ref`.`commission_earned`),0) AS `total_earnings` | |
| FROM | |
| ((`users` `u` | |
| LEFT JOIN `referrals` `r` ON (`u`.`id` = `r`.`referrer_id`)) | |
| LEFT JOIN `referrals` `ref` ON (`u`.`id` = `ref`.`referrer_id` AND `ref`.`status` = 'completed'))) | |
| GROUP BY | |
| `u`.`id`, `u`.`username`, `u`.`referral_code`; | |