-- phpMyAdmin SQL Dump - Diperbarui untuk Kocehind API SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; SET time_zone = "+00:00"; -- -- Table structure for table `users` -- DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `id` int(11) UNSIGNED NOT NULL, `username` varchar(30) NOT NULL, `email` varchar(100) NOT NULL, `password` varchar(255) NOT NULL, `display_name` varchar(50) DEFAULT NULL, `avatar` varchar(255) DEFAULT NULL, `cover_image` varchar(255) DEFAULT NULL, `bio` text DEFAULT NULL, `website` varchar(255) DEFAULT NULL, `location` varchar(100) DEFAULT NULL, `gender` enum('male','female','other') DEFAULT NULL, `is_verified` tinyint(1) NOT NULL DEFAULT 0, `is_private` tinyint(1) NOT NULL DEFAULT 0, `birth_date` date DEFAULT NULL, `status` enum('active','inactive','deleted') NOT NULL DEFAULT 'active', `is_banned` tinyint(1) NOT NULL DEFAULT 0, `login_attempts` smallint(6) NOT NULL DEFAULT 0, `last_login_attempt` datetime DEFAULT NULL, `created_at` timestamp NULL DEFAULT current_timestamp(), `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `last_login` timestamp NULL DEFAULT NULL, `deleted_at` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `user_tokens` (Mengganti user_sessions) -- DROP TABLE IF EXISTS `user_tokens`; CREATE TABLE `user_tokens` ( `id` int(11) UNSIGNED NOT NULL, `user_id` int(11) UNSIGNED NOT NULL, `token` varchar(128) NOT NULL, `device` varchar(50) DEFAULT NULL, `ip_address` varchar(45) DEFAULT NULL, `user_agent` text DEFAULT NULL, `created_at` timestamp NULL DEFAULT current_timestamp(), `last_used` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `expires_at` datetime NOT NULL, `is_revoked` tinyint(1) NOT NULL DEFAULT 0 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `videos` -- DROP TABLE IF EXISTS `videos`; CREATE TABLE `videos` ( `id` int(11) UNSIGNED NOT NULL, `user_id` int(11) UNSIGNED NOT NULL, `parent_video_id` int(11) UNSIGNED DEFAULT NULL, `title` varchar(255) NOT NULL, `description` text DEFAULT NULL, `video_url` varchar(255) NOT NULL, `thumb_url` varchar(255) NOT NULL, `duration` int(11) NOT NULL DEFAULT 0, `size` int(11) UNSIGNED NOT NULL DEFAULT 0, `width` smallint(6) NOT NULL DEFAULT 0, `height` smallint(6) NOT NULL DEFAULT 0, `privacy` enum('public','friends','private') NOT NULL DEFAULT 'public', `allow_comments` tinyint(1) NOT NULL DEFAULT 1, `allow_duet` tinyint(1) NOT NULL DEFAULT 1, `allow_stitch` tinyint(1) NOT NULL DEFAULT 1, `is_draft` tinyint(1) NOT NULL DEFAULT 0, `is_processed` tinyint(1) NOT NULL DEFAULT 0, `processing_status` enum('pending','processing','failed','completed') NOT NULL DEFAULT 'pending', `likes_count` int(11) UNSIGNED NOT NULL DEFAULT 0, `comments_count` int(11) UNSIGNED NOT NULL DEFAULT 0, `views_count` int(11) UNSIGNED NOT NULL DEFAULT 0, `shares_count` int(11) UNSIGNED NOT NULL DEFAULT 0, `saves_count` int(11) UNSIGNED NOT NULL DEFAULT 0, `created_at` timestamp NULL DEFAULT current_timestamp(), `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `published_at` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `video_views` -- DROP TABLE IF EXISTS `video_views`; CREATE TABLE `video_views` ( `id` int(11) UNSIGNED NOT NULL, `video_id` int(11) UNSIGNED NOT NULL, `user_id` int(11) UNSIGNED DEFAULT NULL, `watch_time` int(11) UNSIGNED NOT NULL DEFAULT 0, `percentage` tinyint(3) UNSIGNED NOT NULL DEFAULT 0, `ip_address` varchar(45) DEFAULT NULL, `user_agent` text DEFAULT NULL, `referrer` varchar(255) DEFAULT NULL, `created_at` timestamp NULL DEFAULT current_timestamp(), `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), UNIQUE KEY `uk_video_user_24hr` (`video_id`,`user_id`,`created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `video_shares` -- CREATE TABLE `video_shares` ( `id` int(11) UNSIGNED NOT NULL, `video_id` int(11) UNSIGNED NOT NULL, `user_id` int(11) UNSIGNED DEFAULT NULL, `platform` varchar(50) NOT NULL DEFAULT 'unknown', `ip_address` varchar(45) DEFAULT NULL, `user_agent` text DEFAULT NULL, `created_at` timestamp NULL DEFAULT current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `video_processing_queue` -- CREATE TABLE `video_processing_queue` ( `id` int(11) UNSIGNED NOT NULL, `video_id` int(11) UNSIGNED NOT NULL, `status` enum('pending','processing','completed','failed') NOT NULL DEFAULT 'pending', `attempts` tinyint(3) UNSIGNED NOT NULL DEFAULT 0, `error_message` text DEFAULT NULL, `created_at` timestamp NULL DEFAULT current_timestamp(), `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `video_comments` -- DROP TABLE IF EXISTS `video_comments`; CREATE TABLE `video_comments` ( `id` int(11) UNSIGNED NOT NULL, `video_id` int(11) UNSIGNED NOT NULL, `user_id` int(11) UNSIGNED NOT NULL, `parent_id` int(11) UNSIGNED DEFAULT NULL, `comment` text NOT NULL, `mentions` json DEFAULT NULL, `likes` int(11) UNSIGNED NOT NULL DEFAULT 0, `replies_count` int(11) UNSIGNED NOT NULL DEFAULT 0, `is_edited` tinyint(1) NOT NULL DEFAULT 0, `created_at` timestamp NULL DEFAULT current_timestamp(), `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `user_follows` -- DROP TABLE IF EXISTS `user_follows`; CREATE TABLE `user_follows` ( `id` int(11) UNSIGNED NOT NULL, `follower_id` int(11) UNSIGNED NOT NULL, `following_id` int(11) UNSIGNED NOT NULL, `status` enum('pending','accepted') NOT NULL DEFAULT 'accepted', `created_at` timestamp NULL DEFAULT current_timestamp(), `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `user_blocks` -- DROP TABLE IF EXISTS `user_blocks`; CREATE TABLE `user_blocks` ( `id` int(11) UNSIGNED NOT NULL, `blocker_id` int(11) UNSIGNED NOT NULL, `blocked_id` int(11) UNSIGNED NOT NULL, `created_at` timestamp NULL DEFAULT current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `messages` -- DROP TABLE IF EXISTS `messages`; CREATE TABLE `messages` ( `id` int(11) UNSIGNED NOT NULL, `sender_id` int(11) UNSIGNED NOT NULL, `receiver_id` int(11) UNSIGNED NOT NULL, `message` text NOT NULL, `attachment_url` varchar(255) DEFAULT NULL, `attachment_type` enum('image','video','audio','text') DEFAULT NULL, `is_read` tinyint(1) NOT NULL DEFAULT 0, `is_edited` tinyint(1) NOT NULL DEFAULT 0, `is_deleted_by_sender` tinyint(1) NOT NULL DEFAULT 0, `is_deleted_by_receiver` tinyint(1) NOT NULL DEFAULT 0, `created_at` timestamp NULL DEFAULT current_timestamp(), `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `notifications` -- DROP TABLE IF EXISTS `notifications`; CREATE TABLE `notifications` ( `id` int(11) UNSIGNED NOT NULL, `user_id` int(11) UNSIGNED NOT NULL, `from_user_id` int(11) UNSIGNED DEFAULT NULL, `type` enum('like','comment','reply','follow','message','duet','comment_like','follow_request','follow_accept','mention','system') NOT NULL, `video_id` int(11) UNSIGNED DEFAULT NULL, `comment_id` int(11) UNSIGNED DEFAULT NULL, `message` text DEFAULT NULL, `data` json DEFAULT NULL, `is_read` tinyint(1) NOT NULL DEFAULT 0, `created_at` timestamp NULL DEFAULT current_timestamp(), `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `video_reports` -- DROP TABLE IF EXISTS `video_reports`; CREATE TABLE `video_reports` ( `id` int(11) UNSIGNED NOT NULL, `video_id` int(11) UNSIGNED NOT NULL, `reporter_id` int(11) UNSIGNED NOT NULL, `reported_user_id` int(11) UNSIGNED DEFAULT NULL, `reason` varchar(255) NOT NULL, `description` text DEFAULT NULL, `status` enum('pending','reviewed','rejected') NOT NULL DEFAULT 'pending', `created_at` timestamp NULL DEFAULT current_timestamp(), `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `user_reports` -- DROP TABLE IF EXISTS `user_reports`; CREATE TABLE `user_reports` ( `id` int(11) UNSIGNED NOT NULL, `reported_user_id` int(11) UNSIGNED NOT NULL, `reporter_id` int(11) UNSIGNED NOT NULL, `reason` varchar(255) NOT NULL, `description` text DEFAULT NULL, `status` enum('pending','reviewed','rejected') NOT NULL DEFAULT 'pending', `created_at` timestamp NULL DEFAULT current_timestamp(), `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `password_resets` -- CREATE TABLE `password_resets` ( `id` int(11) UNSIGNED NOT NULL, `email` varchar(100) NOT NULL, `token` varchar(64) NOT NULL, `expires_at` datetime NOT NULL, `is_used` tinyint(1) NOT NULL DEFAULT 0, `created_at` timestamp NULL DEFAULT current_timestamp(), `used_at` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `rate_limits` -- CREATE TABLE `rate_limits` ( `id` int(11) UNSIGNED NOT NULL, `user_id` int(11) UNSIGNED DEFAULT NULL, `action` varchar(100) NOT NULL, `ip_address` varchar(45) NOT NULL, `user_agent` text DEFAULT NULL, `created_at` timestamp NULL DEFAULT current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `activity_logs` -- CREATE TABLE `activity_logs` ( `id` int(11) UNSIGNED NOT NULL, `user_id` int(11) UNSIGNED NOT NULL, `action` varchar(50) NOT NULL, `details` json DEFAULT NULL, `ip_address` varchar(45) DEFAULT NULL, `user_agent` text DEFAULT NULL, `created_at` timestamp NULL DEFAULT current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Table structure for table `user_settings` -- CREATE TABLE `user_settings` ( `id` int(11) UNSIGNED NOT NULL, `user_id` int(11) UNSIGNED NOT NULL, `notifications_enabled` tinyint(1) NOT NULL DEFAULT 1, `privacy_profile` enum('public','private') NOT NULL DEFAULT 'public', `privacy_videos` enum('public','friends','private') NOT NULL DEFAULT 'public', `language` varchar(10) NOT NULL DEFAULT 'id', `timezone` varchar(50) NOT NULL DEFAULT 'Asia/Jakarta', `created_at` timestamp NULL DEFAULT current_timestamp(), `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Indexes for dumped tables -- (Index/Auto_increment disajikan secara ringkas di sini) -- ALTER TABLE `users` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `username` (`username`), ADD UNIQUE KEY `email` (`email`); ALTER TABLE `users` MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=100; ALTER TABLE `user_tokens` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `token` (`token`), ADD KEY `user_id` (`user_id`); ALTER TABLE `user_tokens` MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; ALTER TABLE `videos` ADD PRIMARY KEY (`id`), ADD KEY `user_id` (`user_id`), ADD KEY `parent_video_id` (`parent_video_id`); ALTER TABLE `videos` MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; ALTER TABLE `user_follows` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `uk_follow` (`follower_id`,`following_id`), ADD KEY `following_id` (`following_id`); ALTER TABLE `user_follows` MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; ALTER TABLE `messages` ADD PRIMARY KEY (`id`), ADD KEY `receiver_id` (`receiver_id`), ADD KEY `idx_conversation` (`sender_id`,`receiver_id`); ALTER TABLE `messages` MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; ALTER TABLE `notifications` ADD PRIMARY KEY (`id`), ADD KEY `user_id` (`user_id`); ALTER TABLE `notifications` MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; ALTER TABLE `user_blocks` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `uk_block` (`blocker_id`,`blocked_id`); ALTER TABLE `user_blocks` MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; ALTER TABLE `video_comments` ADD PRIMARY KEY (`id`); ALTER TABLE `video_comments` MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; -- -- Constraints for dumped tables -- ALTER TABLE `user_tokens` ADD CONSTRAINT `user_tokens_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE; ALTER TABLE `messages` ADD CONSTRAINT `messages_ibfk_1` FOREIGN KEY (`sender_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `messages_ibfk_2` FOREIGN KEY (`receiver_id`) REFERENCES `users` (`id`) ON DELETE CASCADE; ALTER TABLE `user_follows` ADD CONSTRAINT `user_follows_ibfk_1` FOREIGN KEY (`follower_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `user_follows_ibfk_2` FOREIGN KEY (`following_id`) REFERENCES `users` (`id`) ON DELETE CASCADE; ALTER TABLE `videos` ADD CONSTRAINT `videos_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `videos_ibfk_2` FOREIGN KEY (`parent_video_id`) REFERENCES `videos` (`id`) ON DELETE SET NULL; COMMIT;