Files
easystream-main/f_modules/m_frontend/m_donations/sql/install.sql
SamiAhmed7777 0b7e2d0a5b feat: Add comprehensive documentation suite and reorganize project structure
- Created complete documentation in docs/ directory
- Added PROJECT_OVERVIEW.md with feature highlights and getting started guide
- Added ARCHITECTURE.md with system design and technical details
- Added SECURITY.md with comprehensive security implementation guide
- Added DEVELOPMENT.md with development workflows and best practices
- Added DEPLOYMENT.md with production deployment instructions
- Added API.md with complete REST API documentation
- Added CONTRIBUTING.md with contribution guidelines
- Added CHANGELOG.md with version history and migration notes
- Reorganized all documentation files into docs/ directory for better organization
- Updated README.md with proper documentation links and quick navigation
- Enhanced project structure with professional documentation standards
2025-10-21 00:39:45 -07:00

143 lines
5.2 KiB
SQL

-- Create tables
CREATE TABLE IF NOT EXISTS donations (
donation_id INT PRIMARY KEY AUTO_INCREMENT,
streamer_id INT NOT NULL,
donor_id INT NOT NULL,
amount DECIMAL(10,2) NOT NULL,
payment_id VARCHAR(255) NOT NULL,
status ENUM('pending', 'completed', 'failed', 'refunded') DEFAULT 'pending',
message TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (streamer_id) REFERENCES users(user_id),
FOREIGN KEY (donor_id) REFERENCES users(user_id)
);
CREATE TABLE IF NOT EXISTS donation_goals (
goal_id INT PRIMARY KEY AUTO_INCREMENT,
streamer_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
description TEXT,
target_amount DECIMAL(10,2) NOT NULL,
current_amount DECIMAL(10,2) DEFAULT 0.00,
start_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
end_date TIMESTAMP NULL,
status ENUM('active', 'completed', 'cancelled') DEFAULT 'active',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (streamer_id) REFERENCES users(user_id)
);
CREATE TABLE IF NOT EXISTS donation_milestones (
milestone_id INT PRIMARY KEY AUTO_INCREMENT,
goal_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
description TEXT,
target_amount DECIMAL(10,2) NOT NULL,
reward_description TEXT,
is_completed BOOLEAN DEFAULT FALSE,
completed_at TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (goal_id) REFERENCES donation_goals(goal_id)
);
CREATE TABLE IF NOT EXISTS donation_analytics (
analytics_id INT PRIMARY KEY AUTO_INCREMENT,
streamer_id INT NOT NULL,
date DATE NOT NULL,
total_donations INT DEFAULT 0,
total_amount DECIMAL(10,2) DEFAULT 0.00,
average_donation DECIMAL(10,2) DEFAULT 0.00,
unique_donors INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (streamer_id) REFERENCES users(user_id),
UNIQUE KEY unique_streamer_date (streamer_id, date)
);
CREATE TABLE IF NOT EXISTS donation_notifications (
notification_id INT PRIMARY KEY AUTO_INCREMENT,
streamer_id INT NOT NULL,
type ENUM('donation', 'goal', 'milestone', 'payout') NOT NULL,
title VARCHAR(255) NOT NULL,
message TEXT NOT NULL,
is_read BOOLEAN DEFAULT FALSE,
read_at TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (streamer_id) REFERENCES users(user_id)
);
CREATE TABLE IF NOT EXISTS api_keys (
key_id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
api_key VARCHAR(64) NOT NULL UNIQUE,
name VARCHAR(255) NOT NULL,
description TEXT,
is_active BOOLEAN DEFAULT TRUE,
last_used TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(user_id)
);
CREATE TABLE IF NOT EXISTS api_rate_limits (
rate_limit_id INT PRIMARY KEY AUTO_INCREMENT,
api_key VARCHAR(64) NOT NULL,
request_count INT DEFAULT 1,
window_start TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (api_key) REFERENCES api_keys(api_key)
);
-- Create indexes
CREATE INDEX idx_donations_streamer ON donations(streamer_id);
CREATE INDEX idx_donations_donor ON donations(donor_id);
CREATE INDEX idx_donations_status ON donations(status);
CREATE INDEX idx_goals_streamer ON donation_goals(streamer_id);
CREATE INDEX idx_goals_status ON donation_goals(status);
CREATE INDEX idx_milestones_goal ON donation_milestones(goal_id);
CREATE INDEX idx_analytics_streamer_date ON donation_analytics(streamer_id, date);
CREATE INDEX idx_notifications_streamer ON donation_notifications(streamer_id);
CREATE INDEX idx_notifications_read ON donation_notifications(is_read);
CREATE INDEX idx_api_key_active ON api_keys(api_key, is_active);
CREATE INDEX idx_rate_limit_window ON api_rate_limits(api_key, window_start);
-- Create views
CREATE OR REPLACE VIEW v_streamer_donations AS
SELECT d.*, u.username as donor_username, u.display_name as donor_display_name
FROM donations d JOIN users u ON d.donor_id = u.user_id;
CREATE OR REPLACE VIEW v_streamer_goals AS
SELECT g.*,
COUNT(m.milestone_id) as milestone_count,
SUM(CASE WHEN m.is_completed = 1 THEN 1 ELSE 0 END) as completed_milestones
FROM donation_goals g
LEFT JOIN donation_milestones m ON g.goal_id = m.goal_id
GROUP BY g.goal_id;
-- Create triggers
DELIMITER //
CREATE TRIGGER tr_update_goal_amount
AFTER INSERT ON donations
FOR EACH ROW
BEGIN
UPDATE donation_goals
SET current_amount = current_amount + NEW.amount
WHERE streamer_id = NEW.streamer_id
AND status = 'active'
AND (end_date IS NULL OR end_date > NOW());
END//
CREATE TRIGGER tr_check_milestone_completion
AFTER UPDATE ON donation_goals
FOR EACH ROW
BEGIN
UPDATE donation_milestones
SET is_completed = 1, completed_at = NOW()
WHERE goal_id = NEW.goal_id
AND is_completed = 0
AND target_amount <= NEW.current_amount;
END//
DELIMITER ;