-- https://www.phpmyadmin.net/
--
-- Hôte : gb9434-001.eu.clouddb.ovh.net:35670
-- Généré le : lun. 09 fév. 2026 à 14:50
-- Version du serveur : 8.4.6-6
-- Version de PHP : 8.1.33

START TRANSACTION;



--
-- Base de données : `RollerLogic`
--

-- --------------------------------------------------------

--
-- Structure de la table `ad_rewards`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- --------------------------------------------------------

--
-- Structure de la table `app_config`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `app_config`
--

INSERT INTO `app_config` (`config_key`, `config_value`, `updated_at`) VALUES
('ambient_music', 'accueil', '2026-01-29 19:54:40'),
('challenge_pack_enabled', 'false', '2026-02-06 17:55:20'),
('launch_date', '2026-02-08T22:00:00.000Z', '2026-02-08 22:16:19'),
('maintenance_end', '2026-02-09T15:29:00.000Z', '2026-02-08 21:18:48'),
('maintenance_message', 'maintenance de test, debut fin auto', '2026-02-08 14:42:00'),
('maintenance_mode', '0', '2026-02-08 21:19:02'),
('public_theme', 'ocean', '2026-02-06 17:55:20');

-- --------------------------------------------------------

--
-- Structure de la table `arcade_bonus`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- --------------------------------------------------------

--
-- Structure de la table `arcade_stats`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `arcade_stats`
--

INSERT INTO `arcade_stats` (`user_id`, `best_score`, `best_levels`, `last_score`, `last_levels`, `last_played_at`, `updated_at`) VALUES
(1, 0, 0, 0, 0, NULL, '2026-02-08 14:12:27'),
(2, 0, 0, 0, 0, NULL, '2026-02-08 20:28:53');

-- --------------------------------------------------------

--
-- Structure de la table `audit_log`
--

CREATE TABLE `audit_log` (
  `id` int NOT NULL,
  `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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `audit_log`
--

INSERT INTO `audit_log` (`id`, `user_id`, `action`, `meta`, `installation_id`, `ip`, `user_agent`, `created_at`) VALUES
(1, 1, 'auth.login', '{\"email\": \"bruno@taaazzz-prog.fr\"}', '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 14:12:27'),
(2, 1, 'settings.update', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 14:12:34'),
(3, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 14:12:44'),
(4, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 14:46:35'),
(5, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 14:48:10'),
(6, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 14:48:39'),
(7, 1, 'auth.login', '{\"email\": \"bruno@taaazzz-prog.fr\"}', NULL, '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 15:54:53'),
(8, 1, 'auth.login', '{\"email\": \"bruno@taaazzz-prog.fr\"}', '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 17:40:51'),
(9, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 17:41:13'),
(10, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 17:48:45'),
(11, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 17:49:48'),
(12, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:03:37'),
(13, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:03:49'),
(14, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:04:56'),
(15, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:04:58'),
(16, 1, 'auth.login', '{\"email\": \"bruno@taaazzz-prog.fr\"}', NULL, '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:06:33'),
(17, 1, 'auth.login', '{\"email\": \"bruno@taaazzz-prog.fr\"}', '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:07:29'),
(18, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:19:41'),
(19, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:20:36'),
(20, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:25:08'),
(21, 1, 'profile.update', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:25:22'),
(22, 1, 'settings.update', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:25:22'),
(23, 1, 'progress.increment', '{\"difficulty\": \"easy\"}', '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:25:30'),
(24, 1, 'wallet.reward', '{\"reward\": 8, \"difficulty\": \"easy\", \"usedAutoSolve\": false}', '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:25:30'),
(25, 1, 'stats.level.complete', '{\"time\": 3000, \"moves\": 6, \"levelId\": 1, \"difficulty\": \"easy\"}', '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:25:30'),
(26, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:49:21'),
(27, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:49:47'),
(28, 1, 'payment.ball_skin', '{\"amount\": 1.49, \"packId\": \"halloween\", \"currency\": \"EUR\", \"sessionId\": \"cs_live_a1szSVA0VUvVdJmm04CPW8AsUxl5CCH105aSWp4pkwPPEtj4id2CdnoGtO\", \"paymentIntentId\": \"pi_3Syd5p197Q6uWWA10JBz1AI5\"}', NULL, '10.0.0.2', 'Stripe/1.0 (+https://stripe.com/docs/webhooks)', '2026-02-08 18:52:32'),
(29, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:52:45'),
(30, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:52:47'),
(31, 1, 'profile.update', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:53:25'),
(32, 1, 'settings.update', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:53:25'),
(33, 1, 'progress.increment', '{\"difficulty\": \"easy\"}', '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:53:38'),
(34, 1, 'wallet.reward', '{\"reward\": 8, \"difficulty\": \"easy\", \"usedAutoSolve\": false}', '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:53:38'),
(35, 1, 'stats.level.complete', '{\"time\": 7000, \"moves\": 6, \"levelId\": 2, \"difficulty\": \"easy\"}', '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 18:53:38'),
(36, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 19:03:33'),
(37, 1, 'auth.logout', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 19:04:04'),
(38, 1, 'auth.login', '{\"email\": \"bruno@taaazzz-prog.fr\"}', '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 19:04:18'),
(39, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 19:06:21'),
(40, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 19:07:33'),
(41, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 19:08:30'),
(42, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 19:09:53'),
(43, 1, 'auth.refresh', NULL, '1983f2e2-52d6-481f-9e3b-79dcf9c0f836', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 19:14:26'),
(44, 1, 'auth.login', '{\"email\": \"bruno@taaazzz-prog.fr\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 19:15:16'),
(45, 1, 'profile.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:32:39'),
(46, 1, 'settings.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:32:39'),
(47, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:33:07'),
(48, 1, 'settings.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:33:58'),
(49, 1, 'settings.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:34:01'),
(50, 1, 'settings.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:34:02'),
(51, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:34:20'),
(52, 1, 'daily.complete', '{\"dateKey\": \"2026-02-09\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:35:07'),
(53, 1, 'weekly.complete', '{\"weekKey\": \"2026-W06\", \"dayOfWeek\": 1}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:35:07'),
(54, 1, 'weekly.complete', '{\"weekKey\": \"2026-W06\", \"dayOfWeek\": 2}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:35:15'),
(55, 1, 'daily.complete', '{\"dateKey\": \"2026-02-10\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:35:15'),
(56, 1, 'daily.complete', '{\"dateKey\": \"2026-02-11\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:35:22'),
(57, 1, 'weekly.complete', '{\"weekKey\": \"2026-W06\", \"dayOfWeek\": 3}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:35:22'),
(58, 1, 'daily.complete', '{\"dateKey\": \"2026-02-12\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:35:28'),
(59, 1, 'weekly.complete', '{\"weekKey\": \"2026-W06\", \"dayOfWeek\": 4}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:35:28'),
(60, 1, 'daily.complete', '{\"dateKey\": \"2026-02-13\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:35:35'),
(61, 1, 'weekly.complete', '{\"weekKey\": \"2026-W06\", \"dayOfWeek\": 5}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:35:35'),
(62, 1, 'daily.complete', '{\"dateKey\": \"2026-02-14\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:35:42'),
(63, 1, 'weekly.complete', '{\"weekKey\": \"2026-W06\", \"dayOfWeek\": 6}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:35:42'),
(64, 1, 'daily.complete', '{\"dateKey\": \"2026-02-08\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:35:50'),
(65, 1, 'weekly.complete', '{\"weekKey\": \"2026-W06\", \"dayOfWeek\": 7}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 19:35:50'),
(66, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:03:22'),
(67, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:15:04'),
(68, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:17:02'),
(69, 1, 'weekly.claim', '{\"weekKey\": \"2026-W06\", \"avatarId\": 123, \"rewardType\": \"avatar\", \"pointsAwarded\": 0}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:17:05'),
(70, 1, 'profile.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:17:24'),
(71, 1, 'settings.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:17:24'),
(72, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:28:03'),
(73, 1, 'auth.logout', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:28:30'),
(74, 2, 'auth.register', '{\"email\": \"bruno@taaazzz.be\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:28:53'),
(75, 2, 'settings.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:29:02'),
(76, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:32:04'),
(77, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:44:55'),
(78, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:45:16'),
(79, 1, 'auth.login', '{\"email\": \"bruno@taaazzz-prog.fr\"}', NULL, '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:46:32'),
(80, 2, 'progress.increment', '{\"difficulty\": \"easy\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:47:44'),
(81, 2, 'wallet.reward', '{\"reward\": 8, \"difficulty\": \"easy\", \"usedAutoSolve\": false}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:47:44'),
(82, 2, 'stats.level.complete', '{\"time\": 2000, \"moves\": 6, \"levelId\": 1, \"difficulty\": \"easy\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:47:44'),
(83, 2, 'auth.logout', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:50:58'),
(84, 2, 'auth.login', '{\"email\": \"bruno@taaazzz.be\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 20:51:09'),
(85, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 21:18:13'),
(86, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 21:19:06'),
(87, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 21:28:20'),
(88, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 21:28:23'),
(89, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 21:38:15'),
(90, 2, 'profile.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 21:39:37'),
(91, 2, 'settings.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 21:39:37'),
(92, 2, 'profile.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 21:40:02'),
(93, 2, 'settings.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 21:40:02'),
(94, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/17.5 Mobile/15A5370a Safari/602.1', '2026-02-08 21:40:12'),
(95, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 21:40:53'),
(96, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/17.5 Mobile/15A5370a Safari/602.1', '2026-02-08 21:41:13'),
(97, 2, 'settings.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/17.5 Mobile/15A5370a Safari/602.1', '2026-02-08 21:41:45'),
(98, 2, 'settings.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/17.5 Mobile/15A5370a Safari/602.1', '2026-02-08 21:41:48'),
(99, 2, 'settings.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/17.5 Mobile/15A5370a Safari/602.1', '2026-02-08 21:41:55'),
(100, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/17.5 Mobile/15A5370a Safari/602.1', '2026-02-08 21:49:49'),
(101, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/17.5 Mobile/15A5370a Safari/602.1', '2026-02-08 21:49:50'),
(102, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 21:50:09'),
(103, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 21:50:14'),
(104, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 21:50:34'),
(105, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 21:51:39'),
(106, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 21:57:30'),
(107, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:01:26'),
(108, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:05:54'),
(109, 2, 'progress.increment', '{\"difficulty\": \"easy\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:06:15'),
(110, 2, 'wallet.reward', '{\"reward\": 8, \"difficulty\": \"easy\", \"usedAutoSolve\": false}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:06:15'),
(111, 2, 'stats.level.complete', '{\"time\": 4000, \"moves\": 6, \"levelId\": 2, \"difficulty\": \"easy\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:06:16'),
(112, 2, 'progress.increment', '{\"difficulty\": \"easy\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:06:22'),
(113, 2, 'wallet.reward', '{\"reward\": 8, \"difficulty\": \"easy\", \"usedAutoSolve\": false}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:06:22'),
(114, 2, 'stats.level.complete', '{\"time\": 1000, \"moves\": 1, \"levelId\": 3, \"difficulty\": \"easy\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:06:22'),
(115, 2, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:06:36'),
(116, 2, 'auth.logout', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 22:15:16'),
(117, 1, 'auth.login', '{\"email\": \"bruno@taaazzz-prog.fr\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:42:30'),
(118, 1, 'profile.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:42:46'),
(119, 1, 'settings.update', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:42:46'),
(120, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:43:04'),
(121, 1, 'progress.increment', '{\"difficulty\": \"easy\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:44:24'),
(122, 1, 'wallet.reward', '{\"reward\": 8, \"difficulty\": \"easy\", \"usedAutoSolve\": false}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:44:25'),
(123, 1, 'stats.level.complete', '{\"time\": 1000, \"moves\": 1, \"levelId\": 3, \"difficulty\": \"easy\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:44:25'),
(124, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 22:44:39'),
(125, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 23:33:33'),
(126, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 23:33:45'),
(127, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 23:49:19'),
(128, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-08 23:49:35'),
(129, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-08 23:52:30'),
(130, 1, 'stats.level.complete', '{\"time\": 7000, \"moves\": 12, \"levelId\": 4, \"difficulty\": \"easy\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 00:06:30'),
(131, 1, 'progress.increment', '{\"difficulty\": \"easy\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 00:06:30'),
(132, 1, 'wallet.reward', '{\"reward\": 8, \"difficulty\": \"easy\", \"usedAutoSolve\": false}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 00:06:31'),
(133, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 00:06:49'),
(134, 1, 'daily.complete', '{\"dateKey\": \"2026-02-09\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 00:07:59'),
(135, 1, 'weekly.complete', '{\"weekKey\": \"2026-W07\", \"dayOfWeek\": 1}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 00:07:59'),
(136, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 00:08:48'),
(137, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-09 08:33:04'),
(138, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-09 08:33:18'),
(139, 1, 'auth.refresh', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-09 08:34:54'),
(140, 1, 'auth.logout', NULL, '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-09 08:37:22'),
(141, 1, 'auth.login', '{\"email\": \"bruno@taaazzz-prog.fr\"}', '1f21459e-7b24-43d0-bd4e-6348cd144170', '10.0.0.2', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-09 08:37:37'),
(142, 1, 'auth.login', '{\"email\": \"bruno@taaazzz-prog.fr\"}', '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-09 09:01:12'),
(143, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-09 09:09:33'),
(144, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-09 09:09:39'),
(145, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-09 09:09:46'),
(146, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-09 09:09:55'),
(147, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-09 09:10:05'),
(148, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-09 09:10:15'),
(149, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-09 09:19:40'),
(150, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', '2026-02-09 09:19:48'),
(151, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 09:24:13'),
(152, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 09:25:10'),
(153, 1, 'profile.update', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 09:25:31'),
(154, 1, 'settings.update', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 09:25:31'),
(155, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 09:32:46'),
(156, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 09:32:56'),
(157, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 09:33:24'),
(158, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 09:33:33'),
(159, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 09:34:07'),
(160, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 09:40:32'),
(161, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 09:40:43'),
(162, 1, 'profile.update', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 09:40:53'),
(163, 1, 'settings.update', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 09:40:53'),
(164, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 09:41:02'),
(165, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 10:05:02'),
(166, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 10:05:14'),
(167, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 10:07:32'),
(168, 1, 'settings.update', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 10:12:15'),
(169, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 10:51:20'),
(170, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:35:32'),
(171, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:39:02'),
(172, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:39:56'),
(173, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:41:17'),
(174, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:42:06'),
(175, 1, 'auth.logout', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:42:17'),
(176, 1, 'auth.login', '{\"email\": \"bruno@taaazzz-prog.fr\"}', '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:42:36'),
(177, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:45:13'),
(178, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:45:32'),
(179, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:48:21'),
(180, 1, 'profile.update', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:48:30'),
(181, 1, 'settings.update', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:48:30'),
(182, 1, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:49:56'),
(183, 1, 'auth.logout', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:50:38'),
(184, 2, 'auth.login', '{\"email\": \"bruno@taaazzz.be\"}', '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:51:05'),
(185, 2, 'profile.update', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:51:30'),
(186, 2, 'settings.update', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:51:30'),
(187, 2, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:53:24'),
(188, 2, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:54:25'),
(189, 2, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:54:56'),
(190, 2, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:59:00'),
(191, 2, 'profile.update', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:59:30'),
(192, 2, 'settings.update', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 11:59:30'),
(193, 2, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 12:03:20'),
(194, 2, 'auth.refresh', NULL, '3dd3b461-1c03-4808-bea0-2edeb4344485', '127.0.0.1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36', '2026-02-09 12:30:26');

-- --------------------------------------------------------

--
-- Structure de la table `avatars`
--

CREATE TABLE `avatars` (
  `id` int NOT NULL,
  `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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `avatars`
--

INSERT INTO `avatars` (`id`, `code`, `category`, `file_path`, `price`, `unlock_condition`, `display_order`, `created_at`) VALUES
(1, 'base-01', 'base', 'base/base-01.png', 0, NULL, 1, '2026-01-29 16:29:13'),
(2, 'base-02', 'base', 'base/base-02.png', 0, NULL, 2, '2026-01-29 16:29:13'),
(3, 'base-03', 'base', 'base/base-03.png', 0, NULL, 3, '2026-01-29 16:29:13'),
(4, 'base-04', 'base', 'base/base-04.png', 0, NULL, 4, '2026-01-29 16:29:13'),
(5, 'base-05', 'base', 'base/base-05.png', 0, NULL, 5, '2026-01-29 16:29:13'),
(6, 'base-06', 'base', 'base/base-06.png', 0, NULL, 6, '2026-01-29 16:29:13'),
(7, 'base-07', 'base', 'base/base-07.png', 0, NULL, 7, '2026-01-29 16:29:13'),
(8, 'base-08', 'base', 'base/base-08.png', 0, NULL, 8, '2026-01-29 16:29:13'),
(9, 'base-09', 'base', 'base/base-09.png', 0, NULL, 9, '2026-01-29 16:29:13'),
(10, 'base-10', 'base', 'base/base-10.png', 0, NULL, 10, '2026-01-29 16:29:13'),
(11, 'base-11', 'base', 'base/base-11.png', 0, NULL, 11, '2026-01-29 16:29:13'),
(12, 'base-12', 'base', 'base/base-12.png', 0, NULL, 12, '2026-01-29 16:29:13'),
(13, 'base-13', 'base', 'base/base-13.png', 0, NULL, 13, '2026-01-29 16:29:13'),
(14, 'base-14', 'base', 'base/base-14.png', 0, NULL, 14, '2026-01-29 16:29:13'),
(15, 'base-15', 'base', 'base/base-15.png', 0, NULL, 15, '2026-01-29 16:29:13'),
(16, 'base-16', 'base', 'base/base-16.png', 0, NULL, 16, '2026-01-29 16:29:13'),
(17, 'base-17', 'base', 'base/base-17.png', 0, NULL, 17, '2026-01-29 16:29:13'),
(18, 'base-18', 'base', 'base/base-18.png', 0, NULL, 18, '2026-01-29 16:29:13'),
(19, 'base-19', 'base', 'base/base-19.png', 0, NULL, 19, '2026-01-29 16:29:13'),
(20, 'base-20', 'base', 'base/base-20.png', 0, NULL, 20, '2026-01-29 16:29:13'),
(21, 'beta-testeur-01', 'recompense', 'beta_testeur/beta_test_1.png', 0, '{\"type\": \"beta_tester\"}', 100, '2026-02-09 11:38:47'),
(22, 'beta-testeur-02', 'recompense', 'beta_testeur/beta_test_2.png', 0, '{\"type\": \"beta_tester\"}', 101, '2026-02-09 11:38:47'),
(23, 'beta-testeur-03', 'recompense', 'beta_testeur/beta_test_3.png', 0, '{\"type\": \"beta_tester\"}', 102, '2026-02-09 11:38:47'),
(24, 'cool_01', 'achat', 'avatars/cool/cool_01.png', 0, NULL, 501, '2026-02-09 13:39:58'),
(25, 'cool_02', 'achat', 'avatars/cool/cool_02.png', 0, NULL, 502, '2026-02-09 13:39:58'),
(26, 'cool_03', 'achat', 'avatars/cool/cool_03.png', 0, NULL, 503, '2026-02-09 13:39:58'),
(27, 'cool_04', 'achat', 'avatars/cool/cool_04.png', 0, NULL, 504, '2026-02-09 13:39:58'),
(28, 'cool_05', 'achat', 'avatars/cool/cool_05.png', 0, NULL, 505, '2026-02-09 13:39:58'),
(29, 'cool_06', 'achat', 'avatars/cool/cool_06.png', 0, NULL, 506, '2026-02-09 13:39:58'),
(30, 'cool_07', 'achat', 'avatars/cool/cool_07.png', 0, NULL, 507, '2026-02-09 13:39:58'),
(31, 'cool_08', 'achat', 'avatars/cool/cool_08.png', 0, NULL, 508, '2026-02-09 13:39:58'),
(32, 'cool_09', 'achat', 'avatars/cool/cool_09.png', 0, NULL, 509, '2026-02-09 13:39:58'),
(33, 'cool_10', 'achat', 'avatars/cool/cool_10.png', 0, NULL, 510, '2026-02-09 13:39:58'),
(34, 'cool_11', 'achat', 'avatars/cool/cool_11.png', 0, NULL, 511, '2026-02-09 13:39:58'),
(35, 'cool_12', 'achat', 'avatars/cool/cool_12.png', 0, NULL, 512, '2026-02-09 13:39:58'),
(36, 'cool_13', 'achat', 'avatars/cool/cool_13.png', 0, NULL, 513, '2026-02-09 13:39:58'),
(37, 'cool_14', 'achat', 'avatars/cool/cool_14.png', 0, NULL, 514, '2026-02-09 13:39:58'),
(38, 'cool_15', 'achat', 'avatars/cool/cool_15.png', 0, NULL, 515, '2026-02-09 13:39:58'),
(39, 'cool_16', 'achat', 'avatars/cool/cool_16.png', 0, NULL, 516, '2026-02-09 13:39:58'),
(40, 'cool_17', 'achat', 'avatars/cool/cool_17.png', 0, NULL, 517, '2026-02-09 13:39:58'),
(41, 'cool_18', 'achat', 'avatars/cool/cool_18.png', 0, NULL, 518, '2026-02-09 13:39:58'),
(42, 'cool_19', 'achat', 'avatars/cool/cool_19.png', 0, NULL, 519, '2026-02-09 13:39:59');

-- --------------------------------------------------------

--
-- Structure de la table `avatar_packs`
--

CREATE TABLE `avatar_packs` (
  `id` int NOT NULL,
  `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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `avatar_packs`
--

INSERT INTO `avatar_packs` (`id`, `pack_id`, `name`, `description`, `price`, `folder_path`, `avatar_count`, `is_active`, `created_at`) VALUES
(1, 'cool', 'Pack Avatars Cool', 'Une collection exclusive de 19 avatars fun et colorés !', 23.99, 'avatars/avatard_cool', 19, 1, '2026-02-02 08:04:08');

-- --------------------------------------------------------

--
-- Structure de la table `ball_skin_packs`
--

CREATE TABLE `ball_skin_packs` (
  `id` int NOT NULL,
  `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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `ball_skin_packs`
--

INSERT INTO `ball_skin_packs` (`id`, `pack_id`, `name`, `description`, `price`, `skin_ids`, `skin_count`, `is_active`, `created_at`) VALUES
(1, 'elementaires', 'Pack Billes Élémentaires', '10 billes élémentaires uniques.', 0.99, '[\"elementaire_1\", \"elementaire_2\", \"elementaire_3\", \"elementaire_4\", \"elementaire_5\", \"elementaire_6\", \"elementaire_7\", \"elementaire_8\", \"elementaire_9\", \"elementaire_10\"]', 10, 1, '2026-02-02 16:35:15'),
(2, 'halloween', 'Pack Billes Halloween', '10 billes Halloween à l\'effigie de la saison.', 1.49, '[\"halloween_1\", \"halloween_2\", \"halloween_3\", \"halloween_4\", \"halloween_5\", \"halloween_6\", \"halloween_7\", \"halloween_8\", \"halloween_9\", \"halloween_10\"]', 10, 1, '2026-02-02 16:35:15'),
(3, 'folie', 'Pack Billes Folie', '20 billes variées pour un style complètement fou.', 2.49, '[\"varie_1\", \"varie_2\", \"varie_3\", \"varie_4\", \"varie_5\", \"varie_6\", \"varie_7\", \"varie_8\", \"varie_9\", \"varie_10\", \"varie_11\", \"varie_12\", \"varie_13\", \"varie_14\", \"varie_15\", \"varie_16\", \"varie_17\", \"varie_18\", \"varie_19\", \"varie_20\"]', 20, 1, '2026-02-02 16:35:15');

-- --------------------------------------------------------

--
-- Structure de la table `daily_bonus`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `daily_bonus`
--

INSERT INTO `daily_bonus` (`user_id`, `last_claim_date`, `consecutive_days`, `total_hints_earned`, `total_solutions_earned`, `updated_at`) VALUES
(1, '2026-02-09', 2, 36, 1, '2026-02-09 00:08:18'),
(2, '2026-02-08', 1, 3, 0, '2026-02-08 20:29:10');

-- --------------------------------------------------------

--
-- Structure de la table `daily_challenges`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `daily_challenges`
--

INSERT INTO `daily_challenges` (`date_key`, `difficulty`, `level_index`, `created_at`) VALUES
('2026-01-01', 'medium', 0, '2026-02-01 23:26:46'),
('2026-01-02', 'medium', 1, '2026-02-01 23:26:46'),
('2026-01-03', 'medium', 2, '2026-02-01 23:26:46'),
('2026-01-04', 'medium', 3, '2026-02-01 23:26:46'),
('2026-01-05', 'medium', 4, '2026-02-01 23:26:46'),
('2026-01-06', 'medium', 5, '2026-02-01 23:26:46'),
('2026-01-07', 'medium', 6, '2026-02-01 23:26:46'),
('2026-01-08', 'medium', 7, '2026-02-01 23:26:46'),
('2026-01-09', 'medium', 8, '2026-02-01 23:26:46'),
('2026-01-10', 'medium', 9, '2026-02-01 23:26:46'),
('2026-01-11', 'medium', 10, '2026-02-01 23:26:46'),
('2026-01-12', 'medium', 11, '2026-02-01 23:26:46'),
('2026-01-13', 'medium', 12, '2026-02-01 23:26:46'),
('2026-01-14', 'medium', 13, '2026-02-01 23:26:46'),
('2026-01-15', 'medium', 14, '2026-02-01 23:26:46'),
('2026-01-16', 'medium', 15, '2026-02-01 23:26:46'),
('2026-01-17', 'medium', 16, '2026-02-01 23:26:46'),
('2026-01-18', 'medium', 17, '2026-02-01 23:26:46'),
('2026-01-19', 'medium', 18, '2026-02-01 23:26:46'),
('2026-01-20', 'medium', 19, '2026-02-01 23:26:46'),
('2026-01-21', 'medium', 20, '2026-02-01 23:26:46'),
('2026-01-22', 'medium', 21, '2026-02-01 23:26:46'),
('2026-01-23', 'medium', 22, '2026-02-01 23:26:46'),
('2026-01-24', 'medium', 23, '2026-02-01 23:26:46'),
('2026-01-25', 'medium', 24, '2026-02-01 23:26:46'),
('2026-01-26', 'medium', 25, '2026-02-01 23:26:46'),
('2026-01-27', 'medium', 26, '2026-02-01 23:26:46'),
('2026-01-28', 'medium', 27, '2026-02-01 23:26:46'),
('2026-01-29', 'medium', 28, '2026-02-01 23:26:46'),
('2026-01-30', 'medium', 29, '2026-02-01 23:26:46'),
('2026-01-31', 'medium', 30, '2026-02-01 23:26:46');

-- --------------------------------------------------------

--
-- Structure de la table `daily_progress`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `daily_progress`
--

INSERT INTO `daily_progress` (`user_id`, `completed`, `monthly_claims`, `updated_at`) VALUES
(1, '[\"2026-02-09\", \"2026-02-10\", \"2026-02-11\", \"2026-02-12\", \"2026-02-13\", \"2026-02-14\", \"2026-02-08\"]', '[]', '2026-02-08 19:35:50'),
(2, '[]', '[]', '2026-02-08 20:28:53');

-- --------------------------------------------------------

--
-- Structure de la table `infinite_stats`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `infinite_stats`
--

INSERT INTO `infinite_stats` (`user_id`, `best_levels`, `last_levels`, `last_played_at`, `updated_at`) VALUES
(1, 0, 0, NULL, '2026-02-08 14:12:27'),
(2, 0, 0, NULL, '2026-02-08 20:28:53');

-- --------------------------------------------------------

--
-- Structure de la table `leaderboard_entries`
--

CREATE TABLE `leaderboard_entries` (
  `id` int NOT NULL,
  `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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `leaderboard_entries`
--

INSERT INTO `leaderboard_entries` (`id`, `user_id`, `difficulty`, `level_index`, `time_ms`, `moves`, `created_at`) VALUES
(1, 1, 'easy', 0, 3000, 6, '2026-02-08 18:25:30'),
(2, 1, 'easy', 1, 7000, 6, '2026-02-08 18:53:38'),
(3, 2, 'easy', 0, 2000, 6, '2026-02-08 20:47:44'),
(4, 2, 'easy', 1, 4000, 6, '2026-02-08 22:06:15'),
(5, 1, 'easy', 3, 7000, 12, '2026-02-09 00:06:31');

-- --------------------------------------------------------

--
-- Structure de la table `level_stats`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `level_stats`
--

INSERT INTO `level_stats` (`user_id`, `difficulty`, `level_id`, `completions`, `last_moves`, `last_time`, `best_moves`, `best_time`, `updated_at`) VALUES
(1, 'easy', 1, 1, 6, 3000, 6, 3000, '2026-02-08 18:25:30'),
(1, 'easy', 2, 1, 6, 7000, 6, 7000, '2026-02-08 18:53:38'),
(1, 'easy', 3, 1, 1, 1000, 1, 1000, '2026-02-08 22:44:24'),
(1, 'easy', 4, 1, 12, 7000, 12, 7000, '2026-02-09 00:06:30'),
(2, 'easy', 1, 1, 6, 2000, 6, 2000, '2026-02-08 20:47:44'),
(2, 'easy', 2, 1, 6, 4000, 6, 4000, '2026-02-08 22:06:15'),
(2, 'easy', 3, 1, 1, 1000, 1, 1000, '2026-02-08 22:06:22');

-- --------------------------------------------------------

--
-- Structure de la table `pack_avatars`
--

CREATE TABLE `pack_avatars` (
  `pack_id` varchar(50) NOT NULL,
  `avatar_id` int NOT NULL,
  `display_order` int DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `pack_avatars`
--

INSERT INTO `pack_avatars` (`pack_id`, `avatar_id`, `display_order`) VALUES
('cool', 24, 1),
('cool', 25, 2),
('cool', 26, 3),
('cool', 27, 4),
('cool', 28, 5),
('cool', 29, 6),
('cool', 30, 7),
('cool', 31, 8),
('cool', 32, 9),
('cool', 33, 10),
('cool', 34, 11),
('cool', 35, 12),
('cool', 36, 13),
('cool', 37, 14),
('cool', 38, 15),
('cool', 39, 16),
('cool', 40, 17),
('cool', 41, 18),
('cool', 42, 19);

-- --------------------------------------------------------

--
-- Structure de la table `progress`
--

CREATE TABLE `progress` (
  `user_id` int NOT NULL,
  `difficulty` enum('easy','medium','hard','expert') NOT NULL,
  `completed` int DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `progress`
--

INSERT INTO `progress` (`user_id`, `difficulty`, `completed`) VALUES
(1, 'easy', 4),
(1, 'medium', 0),
(1, 'hard', 0),
(1, 'expert', 0),
(2, 'easy', 3),
(2, 'medium', 0),
(2, 'hard', 0),
(2, 'expert', 0);

-- --------------------------------------------------------

--
-- Structure de la table `recent_runs`
--

CREATE TABLE `recent_runs` (
  `id` int NOT NULL,
  `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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `recent_runs`
--

INSERT INTO `recent_runs` (`id`, `user_id`, `difficulty`, `level_id`, `moves`, `time`, `completed_at`, `created_at`) VALUES
(1, 1, 'easy', 1, 6, 3000, '2026-02-08 19:25:30', '2026-02-08 18:25:30'),
(2, 1, 'easy', 2, 6, 7000, '2026-02-08 19:53:38', '2026-02-08 18:53:38'),
(3, 2, 'easy', 1, 6, 2000, '2026-02-08 21:47:44', '2026-02-08 20:47:44'),
(4, 2, 'easy', 2, 6, 4000, '2026-02-08 23:06:15', '2026-02-08 22:06:15'),
(5, 2, 'easy', 3, 1, 1000, '2026-02-08 23:06:22', '2026-02-08 22:06:22'),
(6, 1, 'easy', 3, 1, 1000, '2026-02-08 23:44:25', '2026-02-08 22:44:25'),
(7, 1, 'easy', 4, 12, 7000, '2026-02-09 01:06:30', '2026-02-09 00:06:30');

-- --------------------------------------------------------

--
-- Structure de la table `used_weekly_avatars`
--

CREATE TABLE `used_weekly_avatars` (
  `avatar_id` int NOT NULL COMMENT 'ID de l avatar (1-380)',
  `used_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Déchargement des données de la table `used_weekly_avatars`
--

INSERT INTO `used_weekly_avatars` (`avatar_id`, `used_at`) VALUES
(2, '2026-02-01 23:48:25'),
(5, '2026-02-01 23:48:25'),
(7, '2026-02-01 23:48:25'),
(14, '2026-02-01 23:48:25'),
(20, '2026-02-01 15:40:58'),
(47, '2026-02-09 00:07:09'),
(95, '2026-02-02 00:01:19'),
(123, '2026-02-02 10:21:50'),
(166, '2026-02-02 00:01:19'),
(192, '2026-02-01 23:01:46'),
(224, '2026-02-02 00:01:18'),
(332, '2026-02-02 00:01:19'),
(368, '2026-02-02 00:01:18');

-- --------------------------------------------------------

--
-- Structure de la table `user_avatars`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `user_avatars`
--

INSERT INTO `user_avatars` (`user_id`, `avatar_id`, `source`, `metadata`, `unlocked_at`) VALUES
(1, 21, 'beta_tester', '{\"retroactive\": true}', '2026-02-09 11:44:55'),
(1, 22, 'beta_tester', '{\"retroactive\": true}', '2026-02-09 11:44:55'),
(1, 23, 'beta_tester', '{\"retroactive\": true}', '2026-02-09 11:44:55'),
(2, 21, 'beta_tester', '{\"retroactive\": true}', '2026-02-09 11:44:55'),
(2, 22, 'beta_tester', '{\"retroactive\": true}', '2026-02-09 11:44:55'),
(2, 23, 'beta_tester', '{\"retroactive\": true}', '2026-02-09 11:44:55');

-- --------------------------------------------------------

--
-- Structure de la table `user_avatar_packs`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- --------------------------------------------------------

--
-- Structure de la table `user_ball_skins`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `user_ball_skins`
--

INSERT INTO `user_ball_skins` (`user_id`, `skin_id`, `source_pack`, `unlocked_at`) VALUES
(1, 'elementaire_1', 'elementaires', '2026-02-08 18:25:02'),
(1, 'elementaire_10', 'elementaires', '2026-02-08 18:25:03'),
(1, 'elementaire_2', 'elementaires', '2026-02-08 18:25:02'),
(1, 'elementaire_3', 'elementaires', '2026-02-08 18:25:02'),
(1, 'elementaire_4', 'elementaires', '2026-02-08 18:25:02'),
(1, 'elementaire_5', 'elementaires', '2026-02-08 18:25:03'),
(1, 'elementaire_6', 'elementaires', '2026-02-08 18:25:03'),
(1, 'elementaire_7', 'elementaires', '2026-02-08 18:25:03'),
(1, 'elementaire_8', 'elementaires', '2026-02-08 18:25:03'),
(1, 'elementaire_9', 'elementaires', '2026-02-08 18:25:03'),
(1, 'halloween_1', 'halloween', '2026-02-08 18:52:32'),
(1, 'halloween_10', 'halloween', '2026-02-08 18:52:32'),
(1, 'halloween_2', 'halloween', '2026-02-08 18:52:32'),
(1, 'halloween_3', 'halloween', '2026-02-08 18:52:32'),
(1, 'halloween_4', 'halloween', '2026-02-08 18:52:32'),
(1, 'halloween_5', 'halloween', '2026-02-08 18:52:32'),
(1, 'halloween_6', 'halloween', '2026-02-08 18:52:32'),
(1, 'halloween_7', 'halloween', '2026-02-08 18:52:32'),
(1, 'halloween_8', 'halloween', '2026-02-08 18:52:32'),
(1, 'halloween_9', 'halloween', '2026-02-08 18:52:32');

-- --------------------------------------------------------

--
-- Structure de la table `user_ball_skin_packs`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `user_ball_skin_packs`
--

INSERT INTO `user_ball_skin_packs` (`user_id`, `pack_id`, `purchased_at`, `transaction_id`, `price_paid`) VALUES
(1, 'elementaires', '2026-02-08 18:19:33', NULL, 0.99),
(1, 'halloween', '2026-02-08 18:52:32', 'pi_3Syd5p197Q6uWWA10JBz1AI5', 1.49);

-- --------------------------------------------------------

--
-- Structure de la table `user_challenge_pack`
--

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'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- --------------------------------------------------------

--
-- Structure de la table `user_settings`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `user_settings`
--

INSERT INTO `user_settings` (`user_id`, `music`, `sfx`, `haptics`, `theme`, `animation_speed`, `sfx_volume`, `updated_at`, `music_volume`, `ball_skin`) VALUES
(1, 0, 1, 1, 'ocean', 'normal', 0.70, '2026-02-09 11:48:30', 0.40, 'elementaire_10'),
(2, 0, 1, 1, 'sunset', 'fast', 0.70, '2026-02-08 21:41:55', 0.40, NULL);

-- --------------------------------------------------------

--
-- Structure de la table `user_stats`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `user_stats`
--

INSERT INTO `user_stats` (`user_id`, `total_completions`, `total_moves`, `total_time`, `tutorial_completed`, `badges`, `updated_at`) VALUES
(1, 4, 25, 18000, 0, '[\"starter\"]', '2026-02-09 00:06:30'),
(2, 3, 13, 7000, 0, '[\"starter\", \"early-tester\", \"founder-100\"]', '2026-02-09 11:59:01');

-- --------------------------------------------------------

--
-- Structure de la table `user_weekly_avatars`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Déchargement des données de la table `user_weekly_avatars`
--

INSERT INTO `user_weekly_avatars` (`user_id`, `avatar_id`, `week_key`, `obtained_at`, `obtained_from`) VALUES
(1, 123, NULL, '2026-02-08 20:17:05', '2026-W06');

-- --------------------------------------------------------

--
-- Structure de la table `wallets`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `wallets`
--

INSERT INTO `wallets` (`user_id`, `points`, `hints`, `undos`, `replays`, `bonus_points`, `last_updated`) VALUES
(1, 32, 36, 0, 1, 0, '2026-02-09 00:08:18'),
(2, 24, 3, 0, 0, 0, '2026-02-08 22:06:22');

-- --------------------------------------------------------

--
-- Structure de la table `wallet_history`
--

CREATE TABLE `wallet_history` (
  `id` int NOT NULL,
  `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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Déchargement des données de la table `wallet_history`
--

INSERT INTO `wallet_history` (`id`, `user_id`, `resource`, `delta`, `balance_before`, `balance_after`, `source`, `meta`, `created_at`) VALUES
(1, 1, 'points', 8, 0, 8, 'wallet.reward', '{\"difficulty\": \"easy\", \"usedAutoSolve\": false}', '2026-02-08 18:25:30'),
(2, 1, 'points', 8, 8, 16, 'wallet.reward', '{\"difficulty\": \"easy\", \"usedAutoSolve\": false}', '2026-02-08 18:53:38'),
(3, 1, 'hints', 3, 0, 3, 'daily_bonus', '{\"streak\": 1, \"solutionEarned\": false}', '2026-02-08 20:17:33'),
(4, 1, 'hints', 3, 3, 6, 'daily_bonus', '{\"streak\": 2, \"solutionEarned\": false}', '2026-02-08 20:17:35'),
(5, 1, 'hints', 3, 6, 9, 'daily_bonus', '{\"streak\": 3, \"solutionEarned\": false}', '2026-02-08 20:17:36'),
(6, 1, 'hints', 3, 9, 12, 'daily_bonus', '{\"streak\": 4, \"solutionEarned\": false}', '2026-02-08 20:17:37'),
(7, 1, 'hints', 3, 12, 15, 'daily_bonus', '{\"streak\": 5, \"solutionEarned\": false}', '2026-02-08 20:17:38'),
(8, 1, 'hints', 3, 15, 18, 'daily_bonus', '{\"streak\": 6, \"solutionEarned\": false}', '2026-02-08 20:17:40'),
(9, 1, 'hints', 3, 18, 21, 'daily_bonus', '{\"streak\": 7, \"solutionEarned\": true}', '2026-02-08 20:17:47'),
(10, 1, 'replays', 1, 0, 1, 'daily_bonus', '{\"streak\": 7, \"solutionEarned\": true}', '2026-02-08 20:17:47'),
(11, 1, 'hints', 3, 21, 24, 'daily_bonus', '{\"streak\": 1, \"solutionEarned\": false}', '2026-02-08 20:17:49'),
(12, 1, 'hints', 3, 24, 27, 'daily_bonus', '{\"streak\": 1, \"solutionEarned\": false}', '2026-02-08 20:28:11'),
(13, 1, 'hints', 3, 27, 30, 'daily_bonus', '{\"streak\": 1, \"solutionEarned\": false}', '2026-02-08 20:28:15'),
(14, 1, 'hints', 3, 30, 33, 'daily_bonus', '{\"streak\": 1, \"solutionEarned\": false}', '2026-02-08 20:28:18'),
(15, 2, 'hints', 3, 0, 3, 'daily_bonus', '{\"streak\": 1, \"solutionEarned\": false}', '2026-02-08 20:29:10'),
(16, 2, 'points', 8, 0, 8, 'wallet.reward', '{\"difficulty\": \"easy\", \"usedAutoSolve\": false}', '2026-02-08 20:47:44'),
(17, 2, 'points', 8, 8, 16, 'wallet.reward', '{\"difficulty\": \"easy\", \"usedAutoSolve\": false}', '2026-02-08 22:06:15'),
(18, 2, 'points', 8, 16, 24, 'wallet.reward', '{\"difficulty\": \"easy\", \"usedAutoSolve\": false}', '2026-02-08 22:06:22'),
(19, 1, 'points', 8, 16, 24, 'wallet.reward', '{\"difficulty\": \"easy\", \"usedAutoSolve\": false}', '2026-02-08 22:44:24'),
(20, 1, 'points', 8, 24, 32, 'wallet.reward', '{\"difficulty\": \"easy\", \"usedAutoSolve\": false}', '2026-02-09 00:06:31'),
(21, 1, 'hints', 3, 33, 36, 'daily_bonus', '{\"streak\": 2, \"solutionEarned\": false}', '2026-02-09 00:08:18');

-- --------------------------------------------------------

--
-- Structure de la table `weekly_progress`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Déchargement des données de la table `weekly_progress`
--

INSERT INTO `weekly_progress` (`user_id`, `week_key`, `completed_days`, `reward_claimed`, `reward_type`, `updated_at`) VALUES
(1, '2026-W06', '[1, 2, 3, 4, 5, 6, 7]', 1, 'avatar', '2026-02-08 20:17:05'),
(1, '2026-W07', '[1]', 0, NULL, '2026-02-09 00:07:59'),
(2, '2026-W06', '[]', 0, NULL, '2026-02-08 20:45:37');

-- --------------------------------------------------------

--
-- Structure de la table `weekly_rewards`
--

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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Déchargement des données de la table `weekly_rewards`
--

INSERT INTO `weekly_rewards` (`week_key`, `avatar_id`, `created_at`) VALUES
('2026-W01', 224, '2026-02-02 00:01:18'),
('2026-W02', 368, '2026-02-02 00:01:18'),
('2026-W03', 166, '2026-02-02 00:01:19'),
('2026-W04', 95, '2026-02-02 00:01:19'),
('2026-W05', 332, '2026-02-02 00:01:19'),
('2026-W06', 123, '2026-02-02 10:21:50'),
('2026-W07', 47, '2026-02-09 00:07:09');

--
-- Index pour les tables déchargées
--

--
-- Index pour la table `ad_rewards`
--
ALTER TABLE `ad_rewards`
  ADD PRIMARY KEY (`user_id`,`reward_date`),
  ADD KEY `idx_ad_rewards_date` (`reward_date`);

--
-- Index pour la table `app_config`
--
ALTER TABLE `app_config`
  ADD PRIMARY KEY (`config_key`);

--
-- Index pour la table `arcade_bonus`
--
ALTER TABLE `arcade_bonus`
  ADD PRIMARY KEY (`user_id`);

--
-- Index pour la table `arcade_stats`
--
ALTER TABLE `arcade_stats`
  ADD PRIMARY KEY (`user_id`);

--
-- Index pour la table `audit_log`
--
ALTER TABLE `audit_log`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_audit_user` (`user_id`),
  ADD KEY `idx_audit_created` (`created_at`),
  ADD KEY `idx_audit_install` (`installation_id`);

--
-- Index pour la table `avatars`
--
ALTER TABLE `avatars`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `code` (`code`),
  ADD KEY `idx_avatar_category` (`category`);

--
-- Index pour la table `avatar_packs`
--
ALTER TABLE `avatar_packs`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `pack_id` (`pack_id`);

--
-- Index pour la table `ball_skin_packs`
--
ALTER TABLE `ball_skin_packs`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uniq_ball_pack_id` (`pack_id`);

--
-- Index pour la table `daily_bonus`
--
ALTER TABLE `daily_bonus`
  ADD PRIMARY KEY (`user_id`);

--
-- Index pour la table `daily_challenges`
--
ALTER TABLE `daily_challenges`
  ADD PRIMARY KEY (`date_key`);

--
-- Index pour la table `daily_progress`
--
ALTER TABLE `daily_progress`
  ADD PRIMARY KEY (`user_id`);

--
-- Index pour la table `infinite_stats`
--
ALTER TABLE `infinite_stats`
  ADD PRIMARY KEY (`user_id`);

--
-- Index pour la table `leaderboard_entries`
--
ALTER TABLE `leaderboard_entries`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uniq_user_level` (`user_id`,`difficulty`,`level_index`),
  ADD KEY `idx_leaderboard_difficulty` (`difficulty`),
  ADD KEY `idx_leaderboard_level` (`difficulty`,`level_index`),
  ADD KEY `idx_leaderboard_user` (`user_id`);

--
-- Index pour la table `level_stats`
--
ALTER TABLE `level_stats`
  ADD PRIMARY KEY (`user_id`,`difficulty`,`level_id`),
  ADD KEY `idx_level_user` (`user_id`);

--
-- Index pour la table `pack_avatars`
--
ALTER TABLE `pack_avatars`
  ADD PRIMARY KEY (`pack_id`,`avatar_id`),
  ADD KEY `idx_pack_avatars_pack` (`pack_id`),
  ADD KEY `idx_pack_avatars_avatar` (`avatar_id`);

--
-- Index pour la table `progress`
--
ALTER TABLE `progress`
  ADD PRIMARY KEY (`user_id`,`difficulty`);

--
-- Index pour la table `recent_runs`
--
ALTER TABLE `recent_runs`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_recent_user` (`user_id`),
  ADD KEY `idx_recent_created` (`created_at`);

--
-- Index pour la table `used_weekly_avatars`
--
ALTER TABLE `used_weekly_avatars`
  ADD PRIMARY KEY (`avatar_id`);

--
-- Index pour la table `user_avatars`
--
ALTER TABLE `user_avatars`
  ADD PRIMARY KEY (`user_id`,`avatar_id`),
  ADD KEY `idx_user_avatars_user` (`user_id`),
  ADD KEY `idx_user_avatars_avatar` (`avatar_id`);

--
-- Index pour la table `user_avatar_packs`
--
ALTER TABLE `user_avatar_packs`
  ADD PRIMARY KEY (`user_id`,`pack_id`),
  ADD KEY `idx_user_avatar_packs_user` (`user_id`),
  ADD KEY `idx_user_avatar_packs_pack` (`pack_id`);

--
-- Index pour la table `user_ball_skins`
--
ALTER TABLE `user_ball_skins`
  ADD PRIMARY KEY (`user_id`,`skin_id`),
  ADD KEY `idx_user_ball_skins_user` (`user_id`);

--
-- Index pour la table `user_ball_skin_packs`
--
ALTER TABLE `user_ball_skin_packs`
  ADD PRIMARY KEY (`user_id`,`pack_id`),
  ADD KEY `idx_user_ball_packs_user` (`user_id`),
  ADD KEY `idx_user_ball_packs_pack` (`pack_id`);

--
-- Index pour la table `user_challenge_pack`
--
ALTER TABLE `user_challenge_pack`
  ADD PRIMARY KEY (`user_id`);

--
-- Index pour la table `user_settings`
--
ALTER TABLE `user_settings`
  ADD PRIMARY KEY (`user_id`);

--
-- Index pour la table `user_stats`
--
ALTER TABLE `user_stats`
  ADD PRIMARY KEY (`user_id`);

--
-- Index pour la table `user_weekly_avatars`
--
ALTER TABLE `user_weekly_avatars`
  ADD PRIMARY KEY (`user_id`,`avatar_id`);

--
-- Index pour la table `wallets`
--
ALTER TABLE `wallets`
  ADD PRIMARY KEY (`user_id`);

--
-- Index pour la table `wallet_history`
--
ALTER TABLE `wallet_history`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_wh_user` (`user_id`,`created_at`),
  ADD KEY `idx_wh_source` (`source`,`created_at`);

--
-- Index pour la table `weekly_progress`
--
ALTER TABLE `weekly_progress`
  ADD PRIMARY KEY (`user_id`,`week_key`),
  ADD KEY `idx_weekly_progress_week` (`week_key`);

--
-- Index pour la table `weekly_rewards`
--
ALTER TABLE `weekly_rewards`
  ADD PRIMARY KEY (`week_key`),
  ADD UNIQUE KEY `idx_weekly_avatar` (`avatar_id`,`week_key`);

--
-- AUTO_INCREMENT pour les tables déchargées
--

--
-- AUTO_INCREMENT pour la table `audit_log`
--
ALTER TABLE `audit_log`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=195;

--
-- AUTO_INCREMENT pour la table `avatars`
--
ALTER TABLE `avatars`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=43;

--
-- AUTO_INCREMENT pour la table `avatar_packs`
--
ALTER TABLE `avatar_packs`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- AUTO_INCREMENT pour la table `ball_skin_packs`
--
ALTER TABLE `ball_skin_packs`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

--
-- AUTO_INCREMENT pour la table `leaderboard_entries`
--
ALTER TABLE `leaderboard_entries`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;

--
-- AUTO_INCREMENT pour la table `recent_runs`
--
ALTER TABLE `recent_runs`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;

--
-- AUTO_INCREMENT pour la table `wallet_history`
--
ALTER TABLE `wallet_history`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=22;

--
-- Contraintes pour les tables déchargées
--

--
-- Contraintes pour la table `ad_rewards`
--
ALTER TABLE `ad_rewards`
  ADD CONSTRAINT `ad_rewards_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `arcade_bonus`
--
ALTER TABLE `arcade_bonus`
  ADD CONSTRAINT `arcade_bonus_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `arcade_stats`
--
ALTER TABLE `arcade_stats`
  ADD CONSTRAINT `arcade_stats_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `audit_log`
--
ALTER TABLE `audit_log`
  ADD CONSTRAINT `audit_log_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE SET NULL;

--
-- Contraintes pour la table `daily_bonus`
--
ALTER TABLE `daily_bonus`
  ADD CONSTRAINT `daily_bonus_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `daily_progress`
--
ALTER TABLE `daily_progress`
  ADD CONSTRAINT `daily_progress_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `infinite_stats`
--
ALTER TABLE `infinite_stats`
  ADD CONSTRAINT `infinite_stats_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `leaderboard_entries`
--
ALTER TABLE `leaderboard_entries`
  ADD CONSTRAINT `leaderboard_entries_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `level_stats`
--
ALTER TABLE `level_stats`
  ADD CONSTRAINT `level_stats_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `pack_avatars`
--
ALTER TABLE `pack_avatars`
  ADD CONSTRAINT `pack_avatars_ibfk_1` FOREIGN KEY (`pack_id`) REFERENCES `avatar_packs` (`pack_id`) ON DELETE CASCADE,
  ADD CONSTRAINT `pack_avatars_ibfk_2` FOREIGN KEY (`avatar_id`) REFERENCES `avatars` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `progress`
--
ALTER TABLE `progress`
  ADD CONSTRAINT `progress_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `recent_runs`
--
ALTER TABLE `recent_runs`
  ADD CONSTRAINT `recent_runs_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `user_avatars`
--
ALTER TABLE `user_avatars`
  ADD CONSTRAINT `user_avatars_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `user_avatars_ibfk_2` FOREIGN KEY (`avatar_id`) REFERENCES `avatars` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `user_avatar_packs`
--
ALTER TABLE `user_avatar_packs`
  ADD CONSTRAINT `user_avatar_packs_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `user_ball_skins`
--
ALTER TABLE `user_ball_skins`
  ADD CONSTRAINT `fk_user_ball_skins_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `user_ball_skin_packs`
--
ALTER TABLE `user_ball_skin_packs`
  ADD CONSTRAINT `fk_user_ball_packs_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `user_challenge_pack`
--
ALTER TABLE `user_challenge_pack`
  ADD CONSTRAINT `user_challenge_pack_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `user_settings`
--
ALTER TABLE `user_settings`
  ADD CONSTRAINT `user_settings_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `user_stats`
--
ALTER TABLE `user_stats`
  ADD CONSTRAINT `user_stats_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `user_weekly_avatars`
--
ALTER TABLE `user_weekly_avatars`
  ADD CONSTRAINT `user_weekly_avatars_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `wallets`
--
ALTER TABLE `wallets`
  ADD CONSTRAINT `wallets_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `wallet_history`
--
ALTER TABLE `wallet_history`
  ADD CONSTRAINT `wallet_history_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Contraintes pour la table `weekly_progress`
--
ALTER TABLE `weekly_progress`
  ADD CONSTRAINT `weekly_progress_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;
COMMIT;

