092a8bc7ce
- Removed all backup/duplicate files - Removed test files from root - Consolidated documentation to /docs/ - Moved scripts to /scripts/ - Renamed f_* directories (removed prefix) - Organized icons and assets - Removed unused vendor directories - Cleaned up redundant config files
210 lines
8.9 KiB
SQL
210 lines
8.9 KiB
SQL
-- Rainforest Pay Integration Database Tables for EasyStream
|
|
-- Run this SQL to create the necessary tables for Rainforest Pay integration
|
|
|
|
-- Donations table
|
|
CREATE TABLE IF NOT EXISTS `donations` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`streamer_id` int(11) NOT NULL,
|
|
`donor_id` int(11) DEFAULT NULL,
|
|
`amount` decimal(10,2) NOT NULL,
|
|
`platform_fee` decimal(10,2) NOT NULL DEFAULT 0.00,
|
|
`streamer_amount` decimal(10,2) NOT NULL,
|
|
`donor_name` varchar(255) DEFAULT NULL,
|
|
`message` text DEFAULT NULL,
|
|
`payment_method` varchar(50) NOT NULL DEFAULT 'card',
|
|
`rainforest_payment_id` varchar(255) NOT NULL,
|
|
`status` enum('pending','completed','failed','cancelled','refunded') NOT NULL DEFAULT 'pending',
|
|
`rainforest_data` json DEFAULT NULL,
|
|
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`completed_at` timestamp NULL DEFAULT NULL,
|
|
`failed_at` timestamp NULL DEFAULT NULL,
|
|
`failure_reason` text DEFAULT NULL,
|
|
`payout_id` varchar(255) DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_streamer_id` (`streamer_id`),
|
|
KEY `idx_donor_id` (`donor_id`),
|
|
KEY `idx_rainforest_payment_id` (`rainforest_payment_id`),
|
|
KEY `idx_status` (`status`),
|
|
KEY `idx_created_at` (`created_at`),
|
|
KEY `idx_payout_id` (`payout_id`),
|
|
FOREIGN KEY (`streamer_id`) REFERENCES `db_accountuser` (`usr_id`) ON DELETE CASCADE,
|
|
FOREIGN KEY (`donor_id`) REFERENCES `db_accountuser` (`usr_id`) ON DELETE SET NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- Payouts table
|
|
CREATE TABLE IF NOT EXISTS `payouts` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`streamer_id` int(11) NOT NULL,
|
|
`amount` decimal(10,2) NOT NULL,
|
|
`fee` decimal(10,2) NOT NULL DEFAULT 0.00,
|
|
`rainforest_payout_id` varchar(255) NOT NULL,
|
|
`status` enum('pending','completed','failed','cancelled') NOT NULL DEFAULT 'pending',
|
|
`rainforest_data` json DEFAULT NULL,
|
|
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`completed_at` timestamp NULL DEFAULT NULL,
|
|
`failed_at` timestamp NULL DEFAULT NULL,
|
|
`failure_reason` text DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_streamer_id` (`streamer_id`),
|
|
KEY `idx_rainforest_payout_id` (`rainforest_payout_id`),
|
|
KEY `idx_status` (`status`),
|
|
KEY `idx_created_at` (`created_at`),
|
|
FOREIGN KEY (`streamer_id`) REFERENCES `db_accountuser` (`usr_id`) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- Streamer payout settings table
|
|
CREATE TABLE IF NOT EXISTS `streamer_payout_settings` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`streamer_id` int(11) NOT NULL,
|
|
`payout_method` enum('bank_transfer','mobile_money','wallet','crypto') NOT NULL,
|
|
`payout_details` json NOT NULL,
|
|
`is_verified` tinyint(1) NOT NULL DEFAULT 0,
|
|
`auto_payout` tinyint(1) NOT NULL DEFAULT 0,
|
|
`payout_threshold` decimal(10,2) NOT NULL DEFAULT 10.00,
|
|
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `idx_streamer_id` (`streamer_id`),
|
|
FOREIGN KEY (`streamer_id`) REFERENCES `db_accountuser` (`usr_id`) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- Donation goals table (optional feature)
|
|
CREATE TABLE IF NOT EXISTS `donation_goals` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`streamer_id` int(11) NOT NULL,
|
|
`title` varchar(255) NOT NULL,
|
|
`description` text DEFAULT NULL,
|
|
`target_amount` decimal(10,2) NOT NULL,
|
|
`current_amount` decimal(10,2) NOT NULL DEFAULT 0.00,
|
|
`is_active` tinyint(1) NOT NULL DEFAULT 1,
|
|
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`completed_at` timestamp NULL DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_streamer_id` (`streamer_id`),
|
|
KEY `idx_is_active` (`is_active`),
|
|
FOREIGN KEY (`streamer_id`) REFERENCES `db_accountuser` (`usr_id`) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- Transaction logs table for audit trail
|
|
CREATE TABLE IF NOT EXISTS `rainforest_transaction_logs` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`transaction_type` enum('donation','payout','webhook','refund') NOT NULL,
|
|
`transaction_id` varchar(255) NOT NULL,
|
|
`streamer_id` int(11) DEFAULT NULL,
|
|
`amount` decimal(10,2) DEFAULT NULL,
|
|
`status` varchar(50) NOT NULL,
|
|
`request_data` json DEFAULT NULL,
|
|
`response_data` json DEFAULT NULL,
|
|
`ip_address` varchar(45) DEFAULT NULL,
|
|
`user_agent` text DEFAULT NULL,
|
|
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_transaction_type` (`transaction_type`),
|
|
KEY `idx_transaction_id` (`transaction_id`),
|
|
KEY `idx_streamer_id` (`streamer_id`),
|
|
KEY `idx_created_at` (`created_at`),
|
|
FOREIGN KEY (`streamer_id`) REFERENCES `db_accountuser` (`usr_id`) ON DELETE SET NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- Add donation balance column to existing user table
|
|
ALTER TABLE `db_accountuser`
|
|
ADD COLUMN `donation_balance` decimal(10,2) NOT NULL DEFAULT 0.00 AFTER `usr_affiliate`,
|
|
ADD COLUMN `total_donations_received` decimal(10,2) NOT NULL DEFAULT 0.00 AFTER `donation_balance`,
|
|
ADD COLUMN `total_donations_count` int(11) NOT NULL DEFAULT 0 AFTER `total_donations_received`,
|
|
ADD COLUMN `rainforest_customer_id` varchar(255) DEFAULT NULL AFTER `total_donations_count`,
|
|
ADD INDEX `idx_donation_balance` (`donation_balance`),
|
|
ADD INDEX `idx_rainforest_customer_id` (`rainforest_customer_id`);
|
|
|
|
-- Create indexes for better performance
|
|
CREATE INDEX `idx_donations_streamer_status` ON `donations` (`streamer_id`, `status`);
|
|
CREATE INDEX `idx_donations_completed_at` ON `donations` (`completed_at`);
|
|
CREATE INDEX `idx_payouts_streamer_status` ON `payouts` (`streamer_id`, `status`);
|
|
|
|
-- Insert default donation goals (optional)
|
|
INSERT INTO `donation_goals` (`streamer_id`, `title`, `description`, `target_amount`)
|
|
SELECT `usr_id`, 'Support My Content', 'Help me create better content for you!', 100.00
|
|
FROM `db_accountuser`
|
|
WHERE `usr_id` IN (1, 2, 3) -- Replace with actual streamer IDs
|
|
ON DUPLICATE KEY UPDATE `id` = `id`;
|
|
|
|
-- Create views for easy reporting
|
|
CREATE OR REPLACE VIEW `donation_summary` AS
|
|
SELECT
|
|
d.streamer_id,
|
|
u.usr_user as streamer_username,
|
|
u.usr_dname as streamer_display_name,
|
|
COUNT(d.id) as total_donations,
|
|
SUM(d.amount) as total_amount,
|
|
SUM(d.streamer_amount) as total_earned,
|
|
SUM(d.platform_fee) as total_fees,
|
|
AVG(d.amount) as average_donation,
|
|
MAX(d.amount) as largest_donation,
|
|
MIN(d.created_at) as first_donation,
|
|
MAX(d.completed_at) as latest_donation
|
|
FROM `donations` d
|
|
JOIN `db_accountuser` u ON d.streamer_id = u.usr_id
|
|
WHERE d.status = 'completed'
|
|
GROUP BY d.streamer_id;
|
|
|
|
CREATE OR REPLACE VIEW `monthly_donation_stats` AS
|
|
SELECT
|
|
d.streamer_id,
|
|
u.usr_user as streamer_username,
|
|
YEAR(d.completed_at) as year,
|
|
MONTH(d.completed_at) as month,
|
|
COUNT(d.id) as donations_count,
|
|
SUM(d.amount) as total_amount,
|
|
SUM(d.streamer_amount) as streamer_earnings,
|
|
SUM(d.platform_fee) as platform_fees
|
|
FROM `donations` d
|
|
JOIN `db_accountuser` u ON d.streamer_id = u.usr_id
|
|
WHERE d.status = 'completed'
|
|
GROUP BY d.streamer_id, YEAR(d.completed_at), MONTH(d.completed_at)
|
|
ORDER BY year DESC, month DESC;
|
|
|
|
-- Insert sample configuration data
|
|
INSERT INTO `db_settings` (`setting_key`, `setting_value`, `setting_description`) VALUES
|
|
('rainforest_pay_enabled', '1', 'Enable Rainforest Pay integration'),
|
|
('rainforest_pay_environment', 'sandbox', 'Rainforest Pay environment (sandbox/production)'),
|
|
('rainforest_pay_min_donation', '1.00', 'Minimum donation amount'),
|
|
('rainforest_pay_max_donation', '10000.00', 'Maximum donation amount'),
|
|
('rainforest_pay_platform_fee', '2.5', 'Platform fee percentage'),
|
|
('rainforest_pay_platform_fee_fixed', '0.30', 'Fixed platform fee amount')
|
|
ON DUPLICATE KEY UPDATE `setting_value` = VALUES(`setting_value`);
|
|
|
|
-- Create triggers for automatic balance updates
|
|
DELIMITER $$
|
|
|
|
CREATE TRIGGER `update_streamer_balance_after_donation`
|
|
AFTER UPDATE ON `donations`
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF NEW.status = 'completed' AND OLD.status != 'completed' THEN
|
|
UPDATE `db_accountuser`
|
|
SET
|
|
`donation_balance` = `donation_balance` + NEW.streamer_amount,
|
|
`total_donations_received` = `total_donations_received` + NEW.amount,
|
|
`total_donations_count` = `total_donations_count` + 1
|
|
WHERE `usr_id` = NEW.streamer_id;
|
|
END IF;
|
|
END$$
|
|
|
|
CREATE TRIGGER `update_streamer_balance_after_payout`
|
|
AFTER UPDATE ON `payouts`
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF NEW.status = 'completed' AND OLD.status != 'completed' THEN
|
|
UPDATE `db_accountuser`
|
|
SET `donation_balance` = `donation_balance` - (NEW.amount + NEW.fee)
|
|
WHERE `usr_id` = NEW.streamer_id;
|
|
END IF;
|
|
END$$
|
|
|
|
DELIMITER ;
|
|
|
|
-- Grant necessary permissions (adjust as needed)
|
|
-- GRANT SELECT, INSERT, UPDATE ON `donations` TO 'easystream_user'@'localhost';
|
|
-- GRANT SELECT, INSERT, UPDATE ON `payouts` TO 'easystream_user'@'localhost';
|
|
-- GRANT SELECT, INSERT, UPDATE ON `streamer_payout_settings` TO 'easystream_user'@'localhost';
|
|
|
|
COMMIT; |