CREATE TABLE IF NOT EXISTS `users` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL UNIQUE, `password` VARCHAR(255) NOT NULL, `stripe_customer_id` VARCHAR(255), `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS `songs` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL, `title` VARCHAR(255) NOT NULL, `artist` VARCHAR(255), `file_path` VARCHAR(255) NOT NULL, `uploaded_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS `certificates` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `song_id` INT NOT NULL, `certificate_hash` VARCHAR(255) NOT NULL UNIQUE, `file_path` VARCHAR(255) NOT NULL, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (`song_id`) REFERENCES `songs`(`id`) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS `subscriptions` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL, `stripe_subscription_id` VARCHAR(255) NOT NULL UNIQUE, `plan` VARCHAR(50) NOT NULL, `status` VARCHAR(50) NOT NULL, `start_date` TIMESTAMP NOT NULL, `end_date` TIMESTAMP, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS `daily_uploads` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL, `upload_date` DATE NOT NULL, `upload_count` INT NOT NULL DEFAULT 0, UNIQUE KEY `user_date` (`user_id`, `upload_date`), FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE );