Files
Krystie 092a8bc7ce refactor: organize codebase and remove redundant files
- 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
2026-03-30 16:34:45 -07:00

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;