================================================================================ STRUCTURE DE LA BASE DE DONN├ëES: RollerLogic ================================================================================ ­ƒôè Nombre de tables: 34 -------------------------------------------------------------------------------- ­ƒôï TABLE: ad_rewards -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL reward_date date NO PRI NULL watched_count int YES 0 hints_earned int YES 0 bonus_points_earned int YES 0 last_watched_at datetime YES NULL created_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED updated_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED on update CURRENT_TIMESTAMP ­ƒôê Nombre d'enregistrements: 0 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `ad_rewards` ( `user_id` int NOT NULL, `reward_date` date NOT NULL, `watched_count` int DEFAULT '0', `hints_earned` int DEFAULT '0', `bonus_points_earned` int DEFAULT '0', `last_watched_at` datetime DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`user_id`,`reward_date`), KEY `idx_ad_rewards_date` (`reward_date`), CONSTRAINT `ad_rewards_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: app_config -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ config_key varchar(40) NO PRI NULL config_value text NO NULL updated_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED on update CURRENT_TIMESTAMP ­ƒôê Nombre d'enregistrements: 7 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `app_config` ( `config_key` varchar(40) NOT NULL, `config_value` text NOT NULL, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`config_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: arcade_bonus -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL total_games_played int YES 0 last_bonus_at int YES 0 total_hints_earned int YES 0 updated_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED on update CURRENT_TIMESTAMP ­ƒôê Nombre d'enregistrements: 0 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `arcade_bonus` ( `user_id` int NOT NULL, `total_games_played` int DEFAULT '0', `last_bonus_at` int DEFAULT '0', `total_hints_earned` int DEFAULT '0', `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`user_id`), CONSTRAINT `arcade_bonus_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: arcade_stats -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL best_score int YES 0 best_levels int YES 0 last_score int YES 0 last_levels int YES 0 last_played_at datetime YES NULL updated_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED on update CURRENT_TIMESTAMP ­ƒôê Nombre d'enregistrements: 2 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `arcade_stats` ( `user_id` int NOT NULL, `best_score` int DEFAULT '0', `best_levels` int DEFAULT '0', `last_score` int DEFAULT '0', `last_levels` int DEFAULT '0', `last_played_at` datetime DEFAULT NULL, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`user_id`), CONSTRAINT `arcade_stats_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: audit_log -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ id int NO PRI NULL auto_increment user_id int YES MUL NULL action varchar(80) NO NULL meta json YES NULL installation_id varchar(64) YES MUL NULL ip varchar(64) YES NULL user_agent varchar(255) YES NULL created_at timestamp YES MUL CURRENT_TIMESTAMP DEFAULT_GENERATED ­ƒôê Nombre d'enregistrements: 194 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `audit_log` ( `id` int NOT NULL AUTO_INCREMENT, `user_id` int DEFAULT NULL, `action` varchar(80) NOT NULL, `meta` json DEFAULT NULL, `installation_id` varchar(64) DEFAULT NULL, `ip` varchar(64) DEFAULT NULL, `user_agent` varchar(255) DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_audit_user` (`user_id`), KEY `idx_audit_created` (`created_at`), KEY `idx_audit_install` (`installation_id`), CONSTRAINT `audit_log_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE SET NULL ) ENGINE=InnoDB AUTO_INCREMENT=195 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: avatar_packs -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ id int NO PRI NULL auto_increment pack_id varchar(50) NO UNI NULL name varchar(100) NO NULL description text YES NULL price decimal(10,2) NO 0.00 folder_path varchar(255) NO NULL avatar_count int YES 0 is_active tinyint(1) YES 1 created_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED ­ƒôê Nombre d'enregistrements: 1 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `avatar_packs` ( `id` int NOT NULL AUTO_INCREMENT, `pack_id` varchar(50) NOT NULL, `name` varchar(100) NOT NULL, `description` text, `price` decimal(10,2) NOT NULL DEFAULT '0.00', `folder_path` varchar(255) NOT NULL, `avatar_count` int DEFAULT '0', `is_active` tinyint(1) DEFAULT '1', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `pack_id` (`pack_id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: avatars -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ id int NO PRI NULL auto_increment code varchar(50) NO UNI NULL category enum('base','recompense','achat') NO MUL NULL file_path varchar(255) NO NULL price int YES 0 unlock_condition json YES NULL display_order int YES 0 created_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED ­ƒôê Nombre d'enregistrements: 23 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `avatars` ( `id` int NOT NULL AUTO_INCREMENT, `code` varchar(50) NOT NULL, `category` enum('base','recompense','achat') NOT NULL, `file_path` varchar(255) NOT NULL, `price` int DEFAULT '0', `unlock_condition` json DEFAULT NULL COMMENT 'Conditions de d├®blocage pour les r├®compenses', `display_order` int DEFAULT '0', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `code` (`code`), KEY `idx_avatar_category` (`category`) ) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: ball_skin_packs -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ id int NO PRI NULL auto_increment pack_id varchar(50) NO UNI NULL name varchar(100) NO NULL description text YES NULL price decimal(10,2) NO 0.00 skin_ids json NO NULL skin_count int YES 0 is_active tinyint(1) YES 1 created_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED ­ƒôê Nombre d'enregistrements: 3 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `ball_skin_packs` ( `id` int NOT NULL AUTO_INCREMENT, `pack_id` varchar(50) NOT NULL, `name` varchar(100) NOT NULL, `description` text, `price` decimal(10,2) NOT NULL DEFAULT '0.00', `skin_ids` json NOT NULL, `skin_count` int DEFAULT '0', `is_active` tinyint(1) DEFAULT '1', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uniq_ball_pack_id` (`pack_id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: daily_bonus -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL last_claim_date date YES NULL consecutive_days int YES 0 total_hints_earned int YES 0 total_solutions_earned int YES 0 updated_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED on update CURRENT_TIMESTAMP ­ƒôê Nombre d'enregistrements: 2 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `daily_bonus` ( `user_id` int NOT NULL, `last_claim_date` date DEFAULT NULL, `consecutive_days` int DEFAULT '0', `total_hints_earned` int DEFAULT '0', `total_solutions_earned` int DEFAULT '0', `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`user_id`), CONSTRAINT `daily_bonus_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: daily_challenges -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ date_key date NO PRI NULL difficulty varchar(20) YES medium level_index int NO NULL created_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED ­ƒôê Nombre d'enregistrements: 31 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `daily_challenges` ( `date_key` date NOT NULL, `difficulty` varchar(20) DEFAULT 'medium', `level_index` int NOT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`date_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: daily_progress -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL completed json YES NULL monthly_claims json YES NULL updated_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED on update CURRENT_TIMESTAMP ­ƒôê Nombre d'enregistrements: 2 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `daily_progress` ( `user_id` int NOT NULL, `completed` json DEFAULT NULL, `monthly_claims` json DEFAULT NULL, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`user_id`), CONSTRAINT `daily_progress_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: infinite_stats -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL best_levels int YES 0 last_levels int YES 0 last_played_at datetime YES NULL updated_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED on update CURRENT_TIMESTAMP ­ƒôê Nombre d'enregistrements: 2 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `infinite_stats` ( `user_id` int NOT NULL, `best_levels` int DEFAULT '0', `last_levels` int DEFAULT '0', `last_played_at` datetime DEFAULT NULL, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`user_id`), CONSTRAINT `infinite_stats_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: leaderboard_entries -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ id int NO PRI NULL auto_increment user_id int NO MUL NULL difficulty enum('easy','medium','hard','expert') NO MUL NULL level_index int NO NULL time_ms int NO NULL moves int NO NULL score int YES NULL STORED GENERATED created_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED ­ƒôê Nombre d'enregistrements: 5 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `leaderboard_entries` ( `id` int NOT NULL AUTO_INCREMENT, `user_id` int NOT NULL, `difficulty` enum('easy','medium','hard','expert') NOT NULL, `level_index` int NOT NULL, `time_ms` int NOT NULL, `moves` int NOT NULL, `score` int GENERATED ALWAYS AS (greatest(100,((10000 - (floor((`time_ms` / 1000)) * 100)) - (`moves` * 10)))) STORED, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uniq_user_level` (`user_id`,`difficulty`,`level_index`), KEY `idx_leaderboard_difficulty` (`difficulty`), KEY `idx_leaderboard_level` (`difficulty`,`level_index`), KEY `idx_leaderboard_user` (`user_id`), CONSTRAINT `leaderboard_entries_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: level_stats -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL difficulty enum('easy','medium','hard','expert') NO PRI NULL level_id int NO PRI NULL completions int YES 0 last_moves int YES 0 last_time int YES 0 best_moves int YES NULL best_time int YES NULL updated_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED on update CURRENT_TIMESTAMP ­ƒôê Nombre d'enregistrements: 7 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `level_stats` ( `user_id` int NOT NULL, `difficulty` enum('easy','medium','hard','expert') NOT NULL, `level_id` int NOT NULL, `completions` int DEFAULT '0', `last_moves` int DEFAULT '0', `last_time` int DEFAULT '0', `best_moves` int DEFAULT NULL, `best_time` int DEFAULT NULL, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`user_id`,`difficulty`,`level_id`), KEY `idx_level_user` (`user_id`), CONSTRAINT `level_stats_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: levels_catalog -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ id int NO PRI NULL auto_increment difficulty enum('easy','medium','hard','expert') NO MUL NULL level_index int NO NULL level_id int NO NULL seed int NO NULL signature char(64) NO MUL NULL payload json NO NULL created_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED ­ƒôê Nombre d'enregistrements: 960 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `levels_catalog` ( `id` int NOT NULL AUTO_INCREMENT, `difficulty` enum('easy','medium','hard','expert') NOT NULL, `level_index` int NOT NULL, `level_id` int NOT NULL, `seed` int NOT NULL, `signature` char(64) NOT NULL, `payload` json NOT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uniq_level` (`difficulty`,`level_index`), KEY `idx_level_signature` (`signature`) ) ENGINE=InnoDB AUTO_INCREMENT=1921 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: payment_transactions -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ id int NO PRI NULL auto_increment user_id int NO MUL NULL pack_id varchar(50) NO MUL NULL pack_type varchar(30) NO avatar provider varchar(20) NO NULL status varchar(20) NO NULL amount decimal(10,2) NO NULL currency varchar(10) NO NULL stripe_session_id varchar(255) YES UNI NULL stripe_payment_intent_id varchar(255) YES NULL created_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED updated_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED on update CURRENT_TIMESTAMP ­ƒôê Nombre d'enregistrements: 3 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `payment_transactions` ( `id` int NOT NULL AUTO_INCREMENT, `user_id` int NOT NULL, `pack_id` varchar(50) NOT NULL, `pack_type` varchar(30) NOT NULL DEFAULT 'avatar', `provider` varchar(20) NOT NULL, `status` varchar(20) NOT NULL, `amount` decimal(10,2) NOT NULL, `currency` varchar(10) NOT NULL, `stripe_session_id` varchar(255) DEFAULT NULL, `stripe_payment_intent_id` varchar(255) DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uniq_payment_session` (`stripe_session_id`), KEY `idx_payment_user` (`user_id`), KEY `idx_payment_pack` (`pack_id`), CONSTRAINT `fk_payment_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: progress -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL difficulty enum('easy','medium','hard','expert') NO PRI NULL completed int YES 0 ­ƒôê Nombre d'enregistrements: 8 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `progress` ( `user_id` int NOT NULL, `difficulty` enum('easy','medium','hard','expert') NOT NULL, `completed` int DEFAULT '0', PRIMARY KEY (`user_id`,`difficulty`), CONSTRAINT `progress_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: recent_runs -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ id int NO PRI NULL auto_increment user_id int NO MUL NULL difficulty enum('easy','medium','hard','expert') NO NULL level_id int NO NULL moves int NO NULL time int NO NULL completed_at datetime NO NULL created_at timestamp YES MUL CURRENT_TIMESTAMP DEFAULT_GENERATED ­ƒôê Nombre d'enregistrements: 7 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `recent_runs` ( `id` int NOT NULL AUTO_INCREMENT, `user_id` int NOT NULL, `difficulty` enum('easy','medium','hard','expert') NOT NULL, `level_id` int NOT NULL, `moves` int NOT NULL, `time` int NOT NULL, `completed_at` datetime NOT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_recent_user` (`user_id`), KEY `idx_recent_created` (`created_at`), CONSTRAINT `recent_runs_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: refresh_tokens -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ id int NO PRI NULL auto_increment user_id int NO MUL NULL token_hash char(64) NO UNI NULL expires_at datetime NO MUL NULL revoked_at datetime YES NULL created_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED ­ƒôê Nombre d'enregistrements: 11 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `refresh_tokens` ( `id` int NOT NULL AUTO_INCREMENT, `user_id` int NOT NULL, `token_hash` char(64) NOT NULL, `expires_at` datetime NOT NULL, `revoked_at` datetime DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `token_hash` (`token_hash`), KEY `idx_refresh_user` (`user_id`), KEY `idx_refresh_expires` (`expires_at`), CONSTRAINT `refresh_tokens_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=116 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: used_weekly_avatars -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ avatar_id int NO PRI NULL used_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED ­ƒôê Nombre d'enregistrements: 13 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `used_weekly_avatars` ( `avatar_id` int NOT NULL COMMENT 'ID de l avatar (1-380)', `used_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`avatar_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: user_avatar_packs -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL pack_id varchar(50) NO PRI NULL purchased_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED transaction_id varchar(255) YES NULL price_paid decimal(10,2) NO NULL ­ƒôê Nombre d'enregistrements: 0 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `user_avatar_packs` ( `user_id` int NOT NULL, `pack_id` varchar(50) NOT NULL, `purchased_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `transaction_id` varchar(255) DEFAULT NULL, `price_paid` decimal(10,2) NOT NULL, PRIMARY KEY (`user_id`,`pack_id`), KEY `idx_user_avatar_packs_user` (`user_id`), KEY `idx_user_avatar_packs_pack` (`pack_id`), CONSTRAINT `user_avatar_packs_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: user_avatars -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL avatar_id int NO PRI NULL source varchar(50) YES unknown metadata json YES NULL unlocked_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED ­ƒôê Nombre d'enregistrements: 6 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `user_avatars` ( `user_id` int NOT NULL, `avatar_id` int NOT NULL, `source` varchar(50) DEFAULT 'unknown', `metadata` json DEFAULT NULL, `unlocked_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`user_id`,`avatar_id`), KEY `idx_user_avatars_user` (`user_id`), KEY `idx_user_avatars_avatar` (`avatar_id`), CONSTRAINT `user_avatars_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, CONSTRAINT `user_avatars_ibfk_2` FOREIGN KEY (`avatar_id`) REFERENCES `avatars` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: user_ball_skin_packs -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL pack_id varchar(50) NO PRI NULL purchased_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED transaction_id varchar(255) YES NULL price_paid decimal(10,2) NO NULL ­ƒôê Nombre d'enregistrements: 2 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `user_ball_skin_packs` ( `user_id` int NOT NULL, `pack_id` varchar(50) NOT NULL, `purchased_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `transaction_id` varchar(255) DEFAULT NULL, `price_paid` decimal(10,2) NOT NULL, PRIMARY KEY (`user_id`,`pack_id`), KEY `idx_user_ball_packs_user` (`user_id`), KEY `idx_user_ball_packs_pack` (`pack_id`), CONSTRAINT `fk_user_ball_packs_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: user_ball_skins -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL skin_id varchar(50) NO PRI NULL source_pack varchar(50) YES NULL unlocked_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED ­ƒôê Nombre d'enregistrements: 20 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `user_ball_skins` ( `user_id` int NOT NULL, `skin_id` varchar(50) NOT NULL, `source_pack` varchar(50) DEFAULT NULL, `unlocked_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`user_id`,`skin_id`), KEY `idx_user_ball_skins_user` (`user_id`), CONSTRAINT `fk_user_ball_skins_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: user_cash_pack_purchases -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ id int NO PRI NULL auto_increment user_id int NO MUL NULL pack_id varchar(50) NO MUL NULL pack_name varchar(100) NO NULL price_eur decimal(10,2) NO NULL items_hints int YES 0 items_undos int YES 0 items_replays int YES 0 bonus_points int YES 0 stripe_session_id varchar(255) YES MUL NULL stripe_payment_intent_id varchar(255) YES NULL status varchar(50) YES MUL pending purchased_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED processed_at timestamp YES NULL ­ƒôê Nombre d'enregistrements: 0 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `user_cash_pack_purchases` ( `id` int NOT NULL AUTO_INCREMENT, `user_id` int NOT NULL, `pack_id` varchar(50) NOT NULL, `pack_name` varchar(100) NOT NULL, `price_eur` decimal(10,2) NOT NULL, `items_hints` int DEFAULT '0', `items_undos` int DEFAULT '0', `items_replays` int DEFAULT '0', `bonus_points` int DEFAULT '0', `stripe_session_id` varchar(255) DEFAULT NULL, `stripe_payment_intent_id` varchar(255) DEFAULT NULL, `status` varchar(50) DEFAULT 'pending', `purchased_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `processed_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_user` (`user_id`), KEY `idx_pack` (`pack_id`), KEY `idx_stripe_session` (`stripe_session_id`), KEY `idx_status` (`status`), CONSTRAINT `user_cash_pack_purchases_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: user_challenge_pack -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL purchased_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED transaction_id varchar(255) YES NULL price_paid decimal(10,2) YES 9.99 ­ƒôê Nombre d'enregistrements: 0 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `user_challenge_pack` ( `user_id` int NOT NULL, `purchased_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `transaction_id` varchar(255) DEFAULT NULL, `price_paid` decimal(10,2) DEFAULT '9.99', PRIMARY KEY (`user_id`), CONSTRAINT `user_challenge_pack_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: user_settings -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL music tinyint(1) YES 1 sfx tinyint(1) YES 1 haptics tinyint(1) YES 1 theme varchar(20) YES ocean animation_speed varchar(20) YES normal sfx_volume decimal(4,2) YES 0.70 updated_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED on update CURRENT_TIMESTAMP music_volume decimal(4,2) YES 0.40 ball_skin varchar(50) YES NULL ­ƒôê Nombre d'enregistrements: 2 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `user_settings` ( `user_id` int NOT NULL, `music` tinyint(1) DEFAULT '1', `sfx` tinyint(1) DEFAULT '1', `haptics` tinyint(1) DEFAULT '1', `theme` varchar(20) DEFAULT 'ocean', `animation_speed` varchar(20) DEFAULT 'normal', `sfx_volume` decimal(4,2) DEFAULT '0.70', `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `music_volume` decimal(4,2) DEFAULT '0.40', `ball_skin` varchar(50) DEFAULT NULL, PRIMARY KEY (`user_id`), CONSTRAINT `user_settings_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: user_stats -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL total_completions int YES 0 total_moves int YES 0 total_time int YES 0 tutorial_completed tinyint(1) YES 0 badges json YES NULL updated_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED on update CURRENT_TIMESTAMP ­ƒôê Nombre d'enregistrements: 2 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `user_stats` ( `user_id` int NOT NULL, `total_completions` int DEFAULT '0', `total_moves` int DEFAULT '0', `total_time` int DEFAULT '0', `tutorial_completed` tinyint(1) DEFAULT '0', `badges` json DEFAULT NULL, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`user_id`), CONSTRAINT `user_stats_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: user_weekly_avatars -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL avatar_id int NO PRI NULL week_key varchar(10) YES NULL obtained_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED obtained_from varchar(50) YES NULL ­ƒôê Nombre d'enregistrements: 1 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `user_weekly_avatars` ( `user_id` int NOT NULL, `avatar_id` int NOT NULL COMMENT 'ID de l avatar animal (1-380)', `week_key` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `obtained_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `obtained_from` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`user_id`,`avatar_id`), CONSTRAINT `user_weekly_avatars_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: users -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ id int NO PRI NULL auto_increment email varchar(255) NO UNI NULL display_name varchar(100) YES NULL accent varchar(50) YES NULL title varchar(80) YES NULL motto varchar(200) YES NULL guest tinyint(1) YES 0 created_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED is_admin tinyint(1) YES 0 password_hash varchar(255) YES NULL failed_login_attempts int YES 0 locked_until datetime YES NULL reset_token_hash char(64) YES NULL reset_token_expires datetime YES NULL avatar varchar(100) YES NULL banned_at datetime YES NULL ban_reason varchar(500) YES NULL ban_until datetime YES NULL vip_no_ads tinyint(1) YES 0 vip_expires_at datetime YES NULL ­ƒôê Nombre d'enregistrements: 2 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `users` ( `id` int NOT NULL AUTO_INCREMENT, `email` varchar(255) NOT NULL, `display_name` varchar(100) DEFAULT NULL, `accent` varchar(50) DEFAULT NULL, `title` varchar(80) DEFAULT NULL, `motto` varchar(200) DEFAULT NULL, `guest` tinyint(1) DEFAULT '0', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `is_admin` tinyint(1) DEFAULT '0', `password_hash` varchar(255) DEFAULT NULL, `failed_login_attempts` int DEFAULT '0', `locked_until` datetime DEFAULT NULL, `reset_token_hash` char(64) DEFAULT NULL, `reset_token_expires` datetime DEFAULT NULL, `avatar` varchar(100) DEFAULT NULL, `banned_at` datetime DEFAULT NULL, `ban_reason` varchar(500) DEFAULT NULL, `ban_until` datetime DEFAULT NULL, `vip_no_ads` tinyint(1) DEFAULT '0', `vip_expires_at` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: wallet_history -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ id int NO PRI NULL auto_increment user_id int NO MUL NULL resource enum('points','hints','undos','replays','bonus_points') NO NULL delta int NO NULL balance_before int NO 0 balance_after int NO 0 source varchar(80) NO MUL NULL meta json YES NULL created_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED ­ƒôê Nombre d'enregistrements: 21 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `wallet_history` ( `id` int NOT NULL AUTO_INCREMENT, `user_id` int NOT NULL, `resource` enum('points','hints','undos','replays','bonus_points') NOT NULL, `delta` int NOT NULL, `balance_before` int NOT NULL DEFAULT '0', `balance_after` int NOT NULL DEFAULT '0', `source` varchar(80) NOT NULL, `meta` json DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_wh_user` (`user_id`,`created_at`), KEY `idx_wh_source` (`source`,`created_at`), CONSTRAINT `wallet_history_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: wallets -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL points int YES 0 hints int YES 0 undos int YES 0 replays int YES 0 bonus_points int YES 0 last_updated timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED on update CURRENT_TIMESTAMP ­ƒôê Nombre d'enregistrements: 2 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `wallets` ( `user_id` int NOT NULL, `points` int DEFAULT '0', `hints` int DEFAULT '0', `undos` int DEFAULT '0', `replays` int DEFAULT '0', `bonus_points` int DEFAULT '0', `last_updated` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`user_id`), CONSTRAINT `wallets_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: weekly_progress -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ user_id int NO PRI NULL week_key varchar(10) NO PRI NULL completed_days json YES NULL reward_claimed tinyint(1) YES 0 reward_type enum('avatar','points') YES NULL updated_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED on update CURRENT_TIMESTAMP ­ƒôê Nombre d'enregistrements: 3 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `weekly_progress` ( `user_id` int NOT NULL, `week_key` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Format: YYYY-WXX', `completed_days` json DEFAULT NULL COMMENT 'Liste des jours compl├®t├®s [1,2,3...]', `reward_claimed` tinyint(1) DEFAULT '0', `reward_type` enum('avatar','points') COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Type de r├®compense re├ºue', `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`user_id`,`week_key`), KEY `idx_weekly_progress_week` (`week_key`), CONSTRAINT `weekly_progress_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci -------------------------------------------------------------------------------- ­ƒôï TABLE: weekly_rewards -------------------------------------------------------------------------------- Colonnes: Nom Type Null Key Default Extra ------------------------------------------------------------------------------------------------------------------------ week_key varchar(10) NO PRI NULL avatar_id int NO MUL NULL created_at timestamp YES CURRENT_TIMESTAMP DEFAULT_GENERATED ­ƒôê Nombre d'enregistrements: 7 ­ƒÆ¥ CREATE TABLE: CREATE TABLE `weekly_rewards` ( `week_key` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Format: YYYY-WXX (ex: 2026-W05)', `avatar_id` int NOT NULL COMMENT 'ID de l avatar (1-380)', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`week_key`), UNIQUE KEY `idx_weekly_avatar` (`avatar_id`,`week_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ================================================================================ Ô£à Extraction termin├®e ================================================================================ ­ƒöî Connexion ferm├®e