diff --git a/App/Don_t_Deploy/2026-07-20-4b-recency.sql b/App/Don_t_Deploy/2026-07-20-4b-recency.sql new file mode 100644 index 0000000..7a08f81 --- /dev/null +++ b/App/Don_t_Deploy/2026-07-20-4b-recency.sql @@ -0,0 +1,267 @@ +SET FOREIGN_KEY_CHECKS=0; +DELETE FROM player_progress WHERE student_id IN (SELECT id FROM students WHERE class_id=99 AND username IN ('noah','felix','leon','hannes','david','emma','katharina','ida','ben','clara','greta','jakob_s','marlene','olivia')); +DELETE FROM student_results WHERE class_id=99 AND student_id IN (SELECT id FROM students WHERE class_id=99 AND username IN ('noah','felix','leon','hannes','david','emma','katharina','ida','ben','clara','greta','jakob_s','marlene','olivia')); +DELETE FROM assessments WHERE class_id=99 AND session_id IN (SELECT id FROM student_sessions WHERE class_id=99 AND created_at='2025-10-01 08:00:00' AND display_name IN ('Noah','Felix','Leon','Hannes','David','Emma','Katharina','Ida','Ben','Clara','Greta','Jakob','Marlene','Olivia')); +DELETE FROM student_sessions WHERE class_id=99 AND created_at='2025-10-01 08:00:00' AND display_name IN ('Noah','Felix','Leon','Hannes','David','Emma','Katharina','Ida','Ben','Clara','Greta','Jakob','Marlene','Olivia'); +INSERT INTO student_sessions (id, class_id, display_name, created_at, last_seen, country) VALUES ('528680bb-54db-6443-5152-bdeb18ce218f',99,'Noah','2025-10-01 08:00:00','2026-07-19 12:00:00','AT'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('528680bb-54db-6443-5152-bdeb18ce218f','energiemanager',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJibG9ja3NCYWxhbmNlZCI6IDQsICJibG9ja3NUb3RhbCI6IDEyLCAiZGF5c1BsYXllZCI6IDIsICJkYXlzVG90YWwiOiA2fQ==') USING utf8mb4),528000,'2026-06-23 08:20:12'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='noah' AND class_id=99 LIMIT 1),99,'energiemanager',36,528,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJibG9ja3NCYWxhbmNlZCI6IDQsICJibG9ja3NUb3RhbCI6IDEyLCAiZGF5c1BsYXllZCI6IDIsICJkYXlzVG90YWwiOiA2fQ==') USING utf8mb4),'2026-06-23 08:20:12'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('528680bb-54db-6443-5152-bdeb18ce218f','weltkueche',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJjb21wbGV0ZWREaXNoZXMiOiA1LCAidG90YWxEaXNoZXMiOiAxMCwgIm1pc3Rha2VzSW5EaXNoIjogOH0=') USING utf8mb4),222000,'2026-06-24 10:03:28'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='noah' AND class_id=99 LIMIT 1),99,'weltkueche',48,222,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJjb21wbGV0ZWREaXNoZXMiOiA1LCAidG90YWxEaXNoZXMiOiAxMCwgIm1pc3Rha2VzSW5EaXNoIjogOH0=') USING utf8mb4),'2026-06-24 10:03:28'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('528680bb-54db-6443-5152-bdeb18ce218f','kofferdetektiv',99,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiAyLCAiY29ycmVjdF9maXJzdF90cnkiOiAyLCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDYuNH0=') USING utf8mb4),552000,'2026-06-23 09:17:25'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='noah' AND class_id=99 LIMIT 1),99,'kofferdetektiv',40,552,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiAyLCAiY29ycmVjdF9maXJzdF90cnkiOiAyLCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDYuNH0=') USING utf8mb4),'2026-06-23 09:17:25'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('528680bb-54db-6443-5152-bdeb18ce218f','energiemanager',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJibG9ja3NCYWxhbmNlZCI6IDQsICJibG9ja3NUb3RhbCI6IDEyLCAiZGF5c1BsYXllZCI6IDIsICJkYXlzVG90YWwiOiA2fQ==') USING utf8mb4),499000,'2026-06-24 08:35:45'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='noah' AND class_id=99 LIMIT 1),99,'energiemanager',31,499,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJibG9ja3NCYWxhbmNlZCI6IDQsICJibG9ja3NUb3RhbCI6IDEyLCAiZGF5c1BsYXllZCI6IDIsICJkYXlzVG90YWwiOiA2fQ==') USING utf8mb4),'2026-06-24 08:35:45'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('528680bb-54db-6443-5152-bdeb18ce218f','kofferdetektiv',99,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiAyLCAiY29ycmVjdF9maXJzdF90cnkiOiAyLCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDYuN30=') USING utf8mb4),261000,'2026-06-24 11:31:23'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='noah' AND class_id=99 LIMIT 1),99,'kofferdetektiv',37,261,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiAyLCAiY29ycmVjdF9maXJzdF90cnkiOiAyLCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDYuN30=') USING utf8mb4),'2026-06-24 11:31:23'); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='noah' AND class_id=99 LIMIT 1),'energiemanager',1,40,2,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='noah' AND class_id=99 LIMIT 1),'weltkueche',1,20,1,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='noah' AND class_id=99 LIMIT 1),'kofferdetektiv',1,40,2,2); +INSERT INTO student_sessions (id, class_id, display_name, created_at, last_seen, country) VALUES ('c4f8ed3b-c8ae-f936-3486-09debfcf4132',99,'Felix','2025-10-01 08:00:00','2026-07-19 12:00:00','AT'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('c4f8ed3b-c8ae-f936-3486-09debfcf4132','kofferdetektiv',99,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiAzLCAiY29ycmVjdF9maXJzdF90cnkiOiAzLCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDUuMX0=') USING utf8mb4),419000,'2026-05-19 13:50:44'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='felix' AND class_id=99 LIMIT 1),99,'kofferdetektiv',54,419,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiAzLCAiY29ycmVjdF9maXJzdF90cnkiOiAzLCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDUuMX0=') USING utf8mb4),'2026-05-19 13:50:44'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('c4f8ed3b-c8ae-f936-3486-09debfcf4132','heli',99,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiAyLCAicGxhblBjdCI6IDQxLCAic3RhcnRTY29yZSI6IDIsICJsYW5kaW5nU2NvcmUiOiAyfQ==') USING utf8mb4),296000,'2026-06-06 10:56:12'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='felix' AND class_id=99 LIMIT 1),99,'heli',41,296,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiAyLCAicGxhblBjdCI6IDQxLCAic3RhcnRTY29yZSI6IDIsICJsYW5kaW5nU2NvcmUiOiAyfQ==') USING utf8mb4),'2026-06-06 10:56:12'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('c4f8ed3b-c8ae-f936-3486-09debfcf4132','busfahrt',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJ3b25PcmRlcnMiOiAzLCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogMywgImF2Z1RhcEttIjogMTMyfQ==') USING utf8mb4),126000,'2026-07-10 15:15:59'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='felix' AND class_id=99 LIMIT 1),99,'busfahrt',40,126,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJ3b25PcmRlcnMiOiAzLCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogMywgImF2Z1RhcEttIjogMTMyfQ==') USING utf8mb4),'2026-07-10 15:15:59'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('c4f8ed3b-c8ae-f936-3486-09debfcf4132','heli',99,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiAyLCAicGxhblBjdCI6IDM3LCAic3RhcnRTY29yZSI6IDIsICJsYW5kaW5nU2NvcmUiOiAyfQ==') USING utf8mb4),317000,'2026-07-14 12:41:31'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='felix' AND class_id=99 LIMIT 1),99,'heli',37,317,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiAyLCAicGxhblBjdCI6IDM3LCAic3RhcnRTY29yZSI6IDIsICJsYW5kaW5nU2NvcmUiOiAyfQ==') USING utf8mb4),'2026-07-14 12:41:31'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('c4f8ed3b-c8ae-f936-3486-09debfcf4132','klima',99,CONVERT(FROM_BASE64('eyJmaW5hbF90ZW1wZXJhdHVyZSI6IDE3LjQ1LCAiZmluYWxfZmxvb2RlZF9wY3QiOiA2NSwgImZpbmFsX2J1ZGdldCI6IC0yNSwgImZpbmFsX2NvMiI6IDQ3OCwgImZpbmFsX3BvcHVsYXRpb24iOiAyNTB9') USING utf8mb4),390000,'2026-07-11 12:51:44'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='felix' AND class_id=99 LIMIT 1),99,'klima',35,390,CONVERT(FROM_BASE64('eyJmaW5hbF90ZW1wZXJhdHVyZSI6IDE3LjQ1LCAiZmluYWxfZmxvb2RlZF9wY3QiOiA2NSwgImZpbmFsX2J1ZGdldCI6IC0yNSwgImZpbmFsX2NvMiI6IDQ3OCwgImZpbmFsX3BvcHVsYXRpb24iOiAyNTB9') USING utf8mb4),'2026-07-11 12:51:44'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('c4f8ed3b-c8ae-f936-3486-09debfcf4132','heli',99,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiAyLCAicGxhblBjdCI6IDQ0LCAic3RhcnRTY29yZSI6IDIsICJsYW5kaW5nU2NvcmUiOiAyfQ==') USING utf8mb4),355000,'2026-07-18 11:05:43'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='felix' AND class_id=99 LIMIT 1),99,'heli',44,355,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiAyLCAicGxhblBjdCI6IDQ0LCAic3RhcnRTY29yZSI6IDIsICJsYW5kaW5nU2NvcmUiOiAyfQ==') USING utf8mb4),'2026-07-18 11:05:43'); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='felix' AND class_id=99 LIMIT 1),'kofferdetektiv',1,30,1,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='felix' AND class_id=99 LIMIT 1),'heli',2,60,3,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='felix' AND class_id=99 LIMIT 1),'busfahrt',1,20,1,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='felix' AND class_id=99 LIMIT 1),'klima',1,20,1,2); +INSERT INTO student_sessions (id, class_id, display_name, created_at, last_seen, country) VALUES ('5085a253-98c2-2d8b-9024-c51036051cb8',99,'Leon','2025-10-01 08:00:00','2026-07-19 12:00:00','AT'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5085a253-98c2-2d8b-9024-c51036051cb8','energiemanager',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJibG9ja3NCYWxhbmNlZCI6IDcsICJibG9ja3NUb3RhbCI6IDEyLCAiZGF5c1BsYXllZCI6IDMsICJkYXlzVG90YWwiOiA2fQ==') USING utf8mb4),270000,'2026-05-17 09:33:57'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='leon' AND class_id=99 LIMIT 1),99,'energiemanager',56,270,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJibG9ja3NCYWxhbmNlZCI6IDcsICJibG9ja3NUb3RhbCI6IDEyLCAiZGF5c1BsYXllZCI6IDMsICJkYXlzVG90YWwiOiA2fQ==') USING utf8mb4),'2026-05-17 09:33:57'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5085a253-98c2-2d8b-9024-c51036051cb8','logistik',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJvcmRlcnNEZWxpdmVyZWQiOiA1LCAidG90YWxPcmRlcnMiOiAxMCwgIm9yZGVyc0xhdGUiOiAwLCAiZmluYWxCYWxhbmNlIjogMjQwfQ==') USING utf8mb4),280000,'2026-05-27 15:49:15'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='leon' AND class_id=99 LIMIT 1),99,'logistik',52,280,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJvcmRlcnNEZWxpdmVyZWQiOiA1LCAidG90YWxPcmRlcnMiOiAxMCwgIm9yZGVyc0xhdGUiOiAwLCAiZmluYWxCYWxhbmNlIjogMjQwfQ==') USING utf8mb4),'2026-05-27 15:49:15'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5085a253-98c2-2d8b-9024-c51036051cb8','tourismusregion',99,CONVERT(FROM_BASE64('eyJzY29yZSI6IDUzfQ==') USING utf8mb4),269000,'2026-07-15 10:32:07'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='leon' AND class_id=99 LIMIT 1),99,'tourismusregion',53,269,CONVERT(FROM_BASE64('eyJzY29yZSI6IDUzfQ==') USING utf8mb4),'2026-07-15 10:32:07'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5085a253-98c2-2d8b-9024-c51036051cb8','heli',99,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiAyLCAicGxhblBjdCI6IDQ2LCAic3RhcnRTY29yZSI6IDIsICJsYW5kaW5nU2NvcmUiOiAyfQ==') USING utf8mb4),387000,'2026-07-14 13:48:01'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='leon' AND class_id=99 LIMIT 1),99,'heli',46,387,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiAyLCAicGxhblBjdCI6IDQ2LCAic3RhcnRTY29yZSI6IDIsICJsYW5kaW5nU2NvcmUiOiAyfQ==') USING utf8mb4),'2026-07-14 13:48:01'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5085a253-98c2-2d8b-9024-c51036051cb8','energiemanager',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJibG9ja3NCYWxhbmNlZCI6IDQsICJibG9ja3NUb3RhbCI6IDEyLCAiZGF5c1BsYXllZCI6IDIsICJkYXlzVG90YWwiOiA2fQ==') USING utf8mb4),594000,'2026-07-15 09:22:45'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='leon' AND class_id=99 LIMIT 1),99,'energiemanager',36,594,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJibG9ja3NCYWxhbmNlZCI6IDQsICJibG9ja3NUb3RhbCI6IDEyLCAiZGF5c1BsYXllZCI6IDIsICJkYXlzVG90YWwiOiA2fQ==') USING utf8mb4),'2026-07-15 09:22:45'); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='leon' AND class_id=99 LIMIT 1),'energiemanager',2,50,2,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='leon' AND class_id=99 LIMIT 1),'logistik',1,30,1,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='leon' AND class_id=99 LIMIT 1),'tourismusregion',1,30,1,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='leon' AND class_id=99 LIMIT 1),'heli',1,20,1,2); +INSERT INTO student_sessions (id, class_id, display_name, created_at, last_seen, country) VALUES ('058044fd-e54e-037e-7d90-aca97303aecb',99,'Hannes','2025-10-01 08:00:00','2026-07-19 12:00:00','AT'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('058044fd-e54e-037e-7d90-aca97303aecb','logistik',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDEsICJvcmRlcnNEZWxpdmVyZWQiOiAzLCAidG90YWxPcmRlcnMiOiAxMCwgIm9yZGVyc0xhdGUiOiAwLCAiZmluYWxCYWxhbmNlIjogLTMwMH0=') USING utf8mb4),475000,'2026-06-13 12:35:30'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),99,'logistik',28,475,CONVERT(FROM_BASE64('eyJzdGFycyI6IDEsICJvcmRlcnNEZWxpdmVyZWQiOiAzLCAidG90YWxPcmRlcnMiOiAxMCwgIm9yZGVyc0xhdGUiOiAwLCAiZmluYWxCYWxhbmNlIjogLTMwMH0=') USING utf8mb4),'2026-06-13 12:35:30'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('058044fd-e54e-037e-7d90-aca97303aecb','klima',99,CONVERT(FROM_BASE64('eyJmaW5hbF90ZW1wZXJhdHVyZSI6IDE3LjMzLCAiZmluYWxfZmxvb2RlZF9wY3QiOiA2MSwgImZpbmFsX2J1ZGdldCI6IC01LCAiZmluYWxfY28yIjogNDcyLCAiZmluYWxfcG9wdWxhdGlvbiI6IDI1MH0=') USING utf8mb4),142000,'2026-06-16 13:41:07'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),99,'klima',39,142,CONVERT(FROM_BASE64('eyJmaW5hbF90ZW1wZXJhdHVyZSI6IDE3LjMzLCAiZmluYWxfZmxvb2RlZF9wY3QiOiA2MSwgImZpbmFsX2J1ZGdldCI6IC01LCAiZmluYWxfY28yIjogNDcyLCAiZmluYWxfcG9wdWxhdGlvbiI6IDI1MH0=') USING utf8mb4),'2026-06-16 13:41:07'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('058044fd-e54e-037e-7d90-aca97303aecb','busfahrt',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJ3b25PcmRlcnMiOiAyLCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogMiwgImF2Z1RhcEttIjogMTQ5fQ==') USING utf8mb4),551000,'2026-06-24 15:20:55'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),99,'busfahrt',30,551,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJ3b25PcmRlcnMiOiAyLCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogMiwgImF2Z1RhcEttIjogMTQ5fQ==') USING utf8mb4),'2026-06-24 15:20:55'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('058044fd-e54e-037e-7d90-aca97303aecb','farmer',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJoaXRfcmF0ZSI6IDMzLCAieWVhciI6IDUsICJjcm9wc191c2VkIjogMn0=') USING utf8mb4),186000,'2026-06-14 09:19:26'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),99,'farmer',33,186,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJoaXRfcmF0ZSI6IDMzLCAieWVhciI6IDUsICJjcm9wc191c2VkIjogMn0=') USING utf8mb4),'2026-06-14 09:19:26'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('058044fd-e54e-037e-7d90-aca97303aecb','farmer',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDEsICJoaXRfcmF0ZSI6IDI2LCAieWVhciI6IDQsICJjcm9wc191c2VkIjogMn0=') USING utf8mb4),184000,'2026-07-12 13:30:45'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),99,'farmer',26,184,CONVERT(FROM_BASE64('eyJzdGFycyI6IDEsICJoaXRfcmF0ZSI6IDI2LCAieWVhciI6IDQsICJjcm9wc191c2VkIjogMn0=') USING utf8mb4),'2026-07-12 13:30:45'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('058044fd-e54e-037e-7d90-aca97303aecb','busfahrt',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJ3b25PcmRlcnMiOiAzLCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogMywgImF2Z1RhcEttIjogMTQwfQ==') USING utf8mb4),281000,'2026-07-19 12:23:05'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),99,'busfahrt',35,281,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJ3b25PcmRlcnMiOiAzLCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogMywgImF2Z1RhcEttIjogMTQwfQ==') USING utf8mb4),'2026-07-19 12:23:05'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('058044fd-e54e-037e-7d90-aca97303aecb','eu-werkstatt',99,CONVERT(FROM_BASE64('eyJlbmRUeXBlIjogImFib3J0ZWQiLCAic3RlcHNUb3RhbCI6IDEwLCAiZmlyc3RUcnlIaXRzIjogMywgInRvdGFsQXR0ZW1wdHMiOiAxMiwgIm11ZWxsZWltZXJDb3VudCI6IDF9') USING utf8mb4),279000,'2026-07-10 15:13:05'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),99,'eu-werkstatt',33,279,CONVERT(FROM_BASE64('eyJlbmRUeXBlIjogImFib3J0ZWQiLCAic3RlcHNUb3RhbCI6IDEwLCAiZmlyc3RUcnlIaXRzIjogMywgInRvdGFsQXR0ZW1wdHMiOiAxMiwgIm11ZWxsZWltZXJDb3VudCI6IDF9') USING utf8mb4),'2026-07-10 15:13:05'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('058044fd-e54e-037e-7d90-aca97303aecb','fluss',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJiaW9kaXYiOiA0MCwgImVjb25vbXkiOiA0MCwgImZsb29kIjogNjAsICJmb29kIjogNDB9') USING utf8mb4),580000,'2026-07-15 10:13:31'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),99,'fluss',40,580,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJiaW9kaXYiOiA0MCwgImVjb25vbXkiOiA0MCwgImZsb29kIjogNjAsICJmb29kIjogNDB9') USING utf8mb4),'2026-07-15 10:13:31'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('058044fd-e54e-037e-7d90-aca97303aecb','busfahrt',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJ3b25PcmRlcnMiOiAzLCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogMywgImF2Z1RhcEttIjogMTQwfQ==') USING utf8mb4),421000,'2026-07-12 10:28:23'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),99,'busfahrt',35,421,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJ3b25PcmRlcnMiOiAzLCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogMywgImF2Z1RhcEttIjogMTQwfQ==') USING utf8mb4),'2026-07-12 10:28:23'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('058044fd-e54e-037e-7d90-aca97303aecb','weltkueche',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJjb21wbGV0ZWREaXNoZXMiOiAzLCAidG90YWxEaXNoZXMiOiAxMCwgIm1pc3Rha2VzSW5EaXNoIjogMTB9') USING utf8mb4),364000,'2026-07-10 10:03:57'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),99,'weltkueche',34,364,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJjb21wbGV0ZWREaXNoZXMiOiAzLCAidG90YWxEaXNoZXMiOiAxMCwgIm1pc3Rha2VzSW5EaXNoIjogMTB9') USING utf8mb4),'2026-07-10 10:03:57'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('058044fd-e54e-037e-7d90-aca97303aecb','busfahrt',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJ3b25PcmRlcnMiOiAzLCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogMywgImF2Z1RhcEttIjogMTQ2fQ==') USING utf8mb4),226000,'2026-07-19 10:41:39'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),99,'busfahrt',32,226,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJ3b25PcmRlcnMiOiAzLCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogMywgImF2Z1RhcEttIjogMTQ2fQ==') USING utf8mb4),'2026-07-19 10:41:39'); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),'logistik',1,10,1,1); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),'klima',1,20,1,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),'busfahrt',2,80,4,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),'farmer',1,30,2,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),'eu-werkstatt',1,20,1,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),'fluss',1,20,1,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='hannes' AND class_id=99 LIMIT 1),'weltkueche',1,20,1,2); +INSERT INTO student_sessions (id, class_id, display_name, created_at, last_seen, country) VALUES ('c34bbbcb-1f22-a337-87b8-4636d0fb9ca1',99,'David','2025-10-01 08:00:00','2026-07-19 12:00:00','AT'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('c34bbbcb-1f22-a337-87b8-4636d0fb9ca1','klima',99,CONVERT(FROM_BASE64('eyJmaW5hbF90ZW1wZXJhdHVyZSI6IDE1LjgzLCAiZmluYWxfZmxvb2RlZF9wY3QiOiAxMSwgImZpbmFsX2J1ZGdldCI6IDQ5MCwgImZpbmFsX2NvMiI6IDM5NiwgImZpbmFsX3BvcHVsYXRpb24iOiAyNTB9') USING utf8mb4),150000,'2026-06-18 13:50:08'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='david' AND class_id=99 LIMIT 1),99,'klima',89,150,CONVERT(FROM_BASE64('eyJmaW5hbF90ZW1wZXJhdHVyZSI6IDE1LjgzLCAiZmluYWxfZmxvb2RlZF9wY3QiOiAxMSwgImZpbmFsX2J1ZGdldCI6IDQ5MCwgImZpbmFsX2NvMiI6IDM5NiwgImZpbmFsX3BvcHVsYXRpb24iOiAyNTB9') USING utf8mb4),'2026-06-18 13:50:08'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('c34bbbcb-1f22-a337-87b8-4636d0fb9ca1','tourismusregion',99,CONVERT(FROM_BASE64('eyJzY29yZSI6IDc4fQ==') USING utf8mb4),203000,'2026-05-25 14:54:06'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='david' AND class_id=99 LIMIT 1),99,'tourismusregion',78,203,CONVERT(FROM_BASE64('eyJzY29yZSI6IDc4fQ==') USING utf8mb4),'2026-05-25 14:54:06'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('c34bbbcb-1f22-a337-87b8-4636d0fb9ca1','fluss',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJiaW9kaXYiOiA4MSwgImVjb25vbXkiOiA4MSwgImZsb29kIjogMTksICJmb29kIjogODF9') USING utf8mb4),546000,'2026-05-30 10:41:11'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='david' AND class_id=99 LIMIT 1),99,'fluss',81,546,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJiaW9kaXYiOiA4MSwgImVjb25vbXkiOiA4MSwgImZsb29kIjogMTksICJmb29kIjogODF9') USING utf8mb4),'2026-05-30 10:41:11'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('c34bbbcb-1f22-a337-87b8-4636d0fb9ca1','busfahrt',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJ3b25PcmRlcnMiOiA3LCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogNywgImF2Z1RhcEttIjogNDd9') USING utf8mb4),200000,'2026-07-10 13:53:52'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='david' AND class_id=99 LIMIT 1),99,'busfahrt',90,200,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJ3b25PcmRlcnMiOiA3LCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogNywgImF2Z1RhcEttIjogNDd9') USING utf8mb4),'2026-07-10 13:53:52'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('c34bbbcb-1f22-a337-87b8-4636d0fb9ca1','logistik',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJvcmRlcnNEZWxpdmVyZWQiOiA4LCAidG90YWxPcmRlcnMiOiAxMCwgIm9yZGVyc0xhdGUiOiAwLCAiZmluYWxCYWxhbmNlIjogOTAwfQ==') USING utf8mb4),245000,'2026-07-12 08:08:50'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='david' AND class_id=99 LIMIT 1),99,'logistik',85,245,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJvcmRlcnNEZWxpdmVyZWQiOiA4LCAidG90YWxPcmRlcnMiOiAxMCwgIm9yZGVyc0xhdGUiOiAwLCAiZmluYWxCYWxhbmNlIjogOTAwfQ==') USING utf8mb4),'2026-07-12 08:08:50'); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='david' AND class_id=99 LIMIT 1),'klima',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='david' AND class_id=99 LIMIT 1),'tourismusregion',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='david' AND class_id=99 LIMIT 1),'fluss',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='david' AND class_id=99 LIMIT 1),'busfahrt',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='david' AND class_id=99 LIMIT 1),'logistik',1,40,1,4); +INSERT INTO student_sessions (id, class_id, display_name, created_at, last_seen, country) VALUES ('cbf2baff-97f1-4637-8bc2-c5a17de952ab',99,'Emma','2025-10-01 08:00:00','2026-07-19 12:00:00','AT'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('cbf2baff-97f1-4637-8bc2-c5a17de952ab','logistik',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJvcmRlcnNEZWxpdmVyZWQiOiA3LCAidG90YWxPcmRlcnMiOiAxMCwgIm9yZGVyc0xhdGUiOiAwLCAiZmluYWxCYWxhbmNlIjogNjgwfQ==') USING utf8mb4),543000,'2026-05-18 12:43:47'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='emma' AND class_id=99 LIMIT 1),99,'logistik',74,543,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJvcmRlcnNEZWxpdmVyZWQiOiA3LCAidG90YWxPcmRlcnMiOiAxMCwgIm9yZGVyc0xhdGUiOiAwLCAiZmluYWxCYWxhbmNlIjogNjgwfQ==') USING utf8mb4),'2026-05-18 12:43:47'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('cbf2baff-97f1-4637-8bc2-c5a17de952ab','heli',99,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiA0LCAicGxhblBjdCI6IDgyLCAic3RhcnRTY29yZSI6IDQsICJsYW5kaW5nU2NvcmUiOiA0fQ==') USING utf8mb4),375000,'2026-06-23 11:08:06'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='emma' AND class_id=99 LIMIT 1),99,'heli',82,375,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiA0LCAicGxhblBjdCI6IDgyLCAic3RhcnRTY29yZSI6IDQsICJsYW5kaW5nU2NvcmUiOiA0fQ==') USING utf8mb4),'2026-06-23 11:08:06'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('cbf2baff-97f1-4637-8bc2-c5a17de952ab','weltkueche',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJjb21wbGV0ZWREaXNoZXMiOiA5LCAidG90YWxEaXNoZXMiOiAxMCwgIm1pc3Rha2VzSW5EaXNoIjogMn0=') USING utf8mb4),232000,'2026-05-28 11:20:52'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='emma' AND class_id=99 LIMIT 1),99,'weltkueche',87,232,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJjb21wbGV0ZWREaXNoZXMiOiA5LCAidG90YWxEaXNoZXMiOiAxMCwgIm1pc3Rha2VzSW5EaXNoIjogMn0=') USING utf8mb4),'2026-05-28 11:20:52'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('cbf2baff-97f1-4637-8bc2-c5a17de952ab','fluss',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJiaW9kaXYiOiA4NywgImVjb25vbXkiOiA4NywgImZsb29kIjogMTMsICJmb29kIjogODd9') USING utf8mb4),443000,'2026-07-13 14:22:47'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='emma' AND class_id=99 LIMIT 1),99,'fluss',87,443,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJiaW9kaXYiOiA4NywgImVjb25vbXkiOiA4NywgImZsb29kIjogMTMsICJmb29kIjogODd9') USING utf8mb4),'2026-07-13 14:22:47'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('cbf2baff-97f1-4637-8bc2-c5a17de952ab','energiemanager',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJibG9ja3NCYWxhbmNlZCI6IDksICJibG9ja3NUb3RhbCI6IDEyLCAiZGF5c1BsYXllZCI6IDUsICJkYXlzVG90YWwiOiA2fQ==') USING utf8mb4),269000,'2026-07-09 09:58:38'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='emma' AND class_id=99 LIMIT 1),99,'energiemanager',79,269,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJibG9ja3NCYWxhbmNlZCI6IDksICJibG9ja3NUb3RhbCI6IDEyLCAiZGF5c1BsYXllZCI6IDUsICJkYXlzVG90YWwiOiA2fQ==') USING utf8mb4),'2026-07-09 09:58:38'); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='emma' AND class_id=99 LIMIT 1),'logistik',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='emma' AND class_id=99 LIMIT 1),'heli',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='emma' AND class_id=99 LIMIT 1),'weltkueche',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='emma' AND class_id=99 LIMIT 1),'fluss',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='emma' AND class_id=99 LIMIT 1),'energiemanager',1,40,1,4); +INSERT INTO student_sessions (id, class_id, display_name, created_at, last_seen, country) VALUES ('b6582d11-b238-5ca2-e08d-491894ba15ba',99,'Katharina','2025-10-01 08:00:00','2026-07-19 12:00:00','AT'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('b6582d11-b238-5ca2-e08d-491894ba15ba','sonnensystem',99,CONVERT(FROM_BASE64('eyJjb21wbGV0ZWQiOiA4LCAidG90YWwiOiAyMCwgImZpcnN0VHJ5IjogZmFsc2V9') USING utf8mb4),573000,'2026-06-09 08:20:40'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),99,'sonnensystem',40,573,CONVERT(FROM_BASE64('eyJjb21wbGV0ZWQiOiA4LCAidG90YWwiOiAyMCwgImZpcnN0VHJ5IjogZmFsc2V9') USING utf8mb4),'2026-06-09 08:20:40'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('b6582d11-b238-5ca2-e08d-491894ba15ba','weltkueche',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJjb21wbGV0ZWREaXNoZXMiOiA0LCAidG90YWxEaXNoZXMiOiAxMCwgIm1pc3Rha2VzSW5EaXNoIjogMTB9') USING utf8mb4),572000,'2026-06-21 15:58:01'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),99,'weltkueche',36,572,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJjb21wbGV0ZWREaXNoZXMiOiA0LCAidG90YWxEaXNoZXMiOiAxMCwgIm1pc3Rha2VzSW5EaXNoIjogMTB9') USING utf8mb4),'2026-06-21 15:58:01'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('b6582d11-b238-5ca2-e08d-491894ba15ba','klima',99,CONVERT(FROM_BASE64('eyJmaW5hbF90ZW1wZXJhdHVyZSI6IDE3LjEyLCAiZmluYWxfZmxvb2RlZF9wY3QiOiA1NCwgImZpbmFsX2J1ZGdldCI6IDYwLCAiZmluYWxfY28yIjogNDYxLCAiZmluYWxfcG9wdWxhdGlvbiI6IDI1MH0=') USING utf8mb4),342000,'2026-06-18 11:32:40'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),99,'klima',46,342,CONVERT(FROM_BASE64('eyJmaW5hbF90ZW1wZXJhdHVyZSI6IDE3LjEyLCAiZmluYWxfZmxvb2RlZF9wY3QiOiA1NCwgImZpbmFsX2J1ZGdldCI6IDYwLCAiZmluYWxfY28yIjogNDYxLCAiZmluYWxfcG9wdWxhdGlvbiI6IDI1MH0=') USING utf8mb4),'2026-06-18 11:32:40'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('b6582d11-b238-5ca2-e08d-491894ba15ba','energiemanager',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJibG9ja3NCYWxhbmNlZCI6IDYsICJibG9ja3NUb3RhbCI6IDEyLCAiZGF5c1BsYXllZCI6IDMsICJkYXlzVG90YWwiOiA2fQ==') USING utf8mb4),338000,'2026-05-22 11:13:33'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),99,'energiemanager',46,338,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJibG9ja3NCYWxhbmNlZCI6IDYsICJibG9ja3NUb3RhbCI6IDEyLCAiZGF5c1BsYXllZCI6IDMsICJkYXlzVG90YWwiOiA2fQ==') USING utf8mb4),'2026-05-22 11:13:33'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('b6582d11-b238-5ca2-e08d-491894ba15ba','fluss',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJiaW9kaXYiOiA0NSwgImVjb25vbXkiOiA0NSwgImZsb29kIjogNTUsICJmb29kIjogNDV9') USING utf8mb4),195000,'2026-05-19 15:03:23'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),99,'fluss',45,195,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJiaW9kaXYiOiA0NSwgImVjb25vbXkiOiA0NSwgImZsb29kIjogNTUsICJmb29kIjogNDV9') USING utf8mb4),'2026-05-19 15:03:23'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('b6582d11-b238-5ca2-e08d-491894ba15ba','kofferdetektiv',99,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA0LCAiY29ycmVjdF9maXJzdF90cnkiOiA0LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDQuNn0=') USING utf8mb4),487000,'2026-07-16 09:19:46'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),99,'kofferdetektiv',60,487,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA0LCAiY29ycmVjdF9maXJzdF90cnkiOiA0LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDQuNn0=') USING utf8mb4),'2026-07-16 09:19:46'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('b6582d11-b238-5ca2-e08d-491894ba15ba','tourismustal',99,CONVERT(FROM_BASE64('eyJnb2Fsc0RvbmUiOiA0LCAiZ29hbHNUb3RhbCI6IDYsICJzYXRpc2ZhY3Rpb24iOiA2MSwgIm5hdHVyZSI6IDYxLCAibW9uZXkiOiAxMDB9') USING utf8mb4),465000,'2026-07-17 10:24:16'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),99,'tourismustal',61,465,CONVERT(FROM_BASE64('eyJnb2Fsc0RvbmUiOiA0LCAiZ29hbHNUb3RhbCI6IDYsICJzYXRpc2ZhY3Rpb24iOiA2MSwgIm5hdHVyZSI6IDYxLCAibW9uZXkiOiAxMDB9') USING utf8mb4),'2026-07-17 10:24:16'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('b6582d11-b238-5ca2-e08d-491894ba15ba','busfahrt',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJ3b25PcmRlcnMiOiA1LCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogNSwgImF2Z1RhcEttIjogODh9') USING utf8mb4),241000,'2026-07-11 09:51:44'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),99,'busfahrt',66,241,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJ3b25PcmRlcnMiOiA1LCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogNSwgImF2Z1RhcEttIjogODh9') USING utf8mb4),'2026-07-11 09:51:44'); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),'sonnensystem',1,20,1,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),'weltkueche',1,20,1,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),'klima',1,20,1,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),'energiemanager',1,20,1,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),'fluss',1,20,1,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),'kofferdetektiv',1,30,1,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),'tourismustal',1,30,1,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='katharina' AND class_id=99 LIMIT 1),'busfahrt',1,30,1,3); +INSERT INTO student_sessions (id, class_id, display_name, created_at, last_seen, country) VALUES ('2c66a48b-8cdc-ad1f-0d68-d90bf3648205',99,'Ida','2025-10-01 08:00:00','2026-07-19 12:00:00','AT'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('2c66a48b-8cdc-ad1f-0d68-d90bf3648205','sonnensystem',99,CONVERT(FROM_BASE64('eyJjb21wbGV0ZWQiOiA4LCAidG90YWwiOiAyMCwgImZpcnN0VHJ5IjogZmFsc2V9') USING utf8mb4),507000,'2026-06-11 12:13:19'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='ida' AND class_id=99 LIMIT 1),99,'sonnensystem',42,507,CONVERT(FROM_BASE64('eyJjb21wbGV0ZWQiOiA4LCAidG90YWwiOiAyMCwgImZpcnN0VHJ5IjogZmFsc2V9') USING utf8mb4),'2026-06-11 12:13:19'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('2c66a48b-8cdc-ad1f-0d68-d90bf3648205','logistik',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJvcmRlcnNEZWxpdmVyZWQiOiA0LCAidG90YWxPcmRlcnMiOiAxMCwgIm9yZGVyc0xhdGUiOiAwLCAiZmluYWxCYWxhbmNlIjogNjB9') USING utf8mb4),317000,'2026-06-09 11:23:18'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='ida' AND class_id=99 LIMIT 1),99,'logistik',43,317,CONVERT(FROM_BASE64('eyJzdGFycyI6IDIsICJvcmRlcnNEZWxpdmVyZWQiOiA0LCAidG90YWxPcmRlcnMiOiAxMCwgIm9yZGVyc0xhdGUiOiAwLCAiZmluYWxCYWxhbmNlIjogNjB9') USING utf8mb4),'2026-06-09 11:23:18'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('2c66a48b-8cdc-ad1f-0d68-d90bf3648205','eu-werkstatt',99,CONVERT(FROM_BASE64('eyJlbmRUeXBlIjogImFib3J0ZWQiLCAic3RlcHNUb3RhbCI6IDEwLCAiZmlyc3RUcnlIaXRzIjogNCwgInRvdGFsQXR0ZW1wdHMiOiAxMiwgIm11ZWxsZWltZXJDb3VudCI6IDF9') USING utf8mb4),448000,'2026-06-13 08:51:55'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='ida' AND class_id=99 LIMIT 1),99,'eu-werkstatt',40,448,CONVERT(FROM_BASE64('eyJlbmRUeXBlIjogImFib3J0ZWQiLCAic3RlcHNUb3RhbCI6IDEwLCAiZmlyc3RUcnlIaXRzIjogNCwgInRvdGFsQXR0ZW1wdHMiOiAxMiwgIm11ZWxsZWltZXJDb3VudCI6IDF9') USING utf8mb4),'2026-06-13 08:51:55'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('2c66a48b-8cdc-ad1f-0d68-d90bf3648205','tourismustal',99,CONVERT(FROM_BASE64('eyJnb2Fsc0RvbmUiOiAyLCAiZ29hbHNUb3RhbCI6IDYsICJzYXRpc2ZhY3Rpb24iOiAzMywgIm5hdHVyZSI6IDMzLCAibW9uZXkiOiAxMDB9') USING utf8mb4),576000,'2026-06-13 12:26:43'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='ida' AND class_id=99 LIMIT 1),99,'tourismustal',33,576,CONVERT(FROM_BASE64('eyJnb2Fsc0RvbmUiOiAyLCAiZ29hbHNUb3RhbCI6IDYsICJzYXRpc2ZhY3Rpb24iOiAzMywgIm5hdHVyZSI6IDMzLCAibW9uZXkiOiAxMDB9') USING utf8mb4),'2026-06-13 12:26:43'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('2c66a48b-8cdc-ad1f-0d68-d90bf3648205','kofferdetektiv',99,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA0LCAiY29ycmVjdF9maXJzdF90cnkiOiA0LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDQuM30=') USING utf8mb4),483000,'2026-07-14 12:59:04'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='ida' AND class_id=99 LIMIT 1),99,'kofferdetektiv',63,483,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA0LCAiY29ycmVjdF9maXJzdF90cnkiOiA0LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDQuM30=') USING utf8mb4),'2026-07-14 12:59:04'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('2c66a48b-8cdc-ad1f-0d68-d90bf3648205','heli',99,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiA0LCAicGxhblBjdCI6IDcxLCAic3RhcnRTY29yZSI6IDQsICJsYW5kaW5nU2NvcmUiOiA0fQ==') USING utf8mb4),460000,'2026-07-10 13:42:09'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='ida' AND class_id=99 LIMIT 1),99,'heli',71,460,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiA0LCAicGxhblBjdCI6IDcxLCAic3RhcnRTY29yZSI6IDQsICJsYW5kaW5nU2NvcmUiOiA0fQ==') USING utf8mb4),'2026-07-10 13:42:09'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('2c66a48b-8cdc-ad1f-0d68-d90bf3648205','sonnensystem',99,CONVERT(FROM_BASE64('eyJjb21wbGV0ZWQiOiAxMywgInRvdGFsIjogMjAsICJmaXJzdFRyeSI6IGZhbHNlfQ==') USING utf8mb4),386000,'2026-07-14 15:08:11'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='ida' AND class_id=99 LIMIT 1),99,'sonnensystem',63,386,CONVERT(FROM_BASE64('eyJjb21wbGV0ZWQiOiAxMywgInRvdGFsIjogMjAsICJmaXJzdFRyeSI6IGZhbHNlfQ==') USING utf8mb4),'2026-07-14 15:08:11'); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='ida' AND class_id=99 LIMIT 1),'sonnensystem',2,50,2,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='ida' AND class_id=99 LIMIT 1),'logistik',1,20,1,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='ida' AND class_id=99 LIMIT 1),'eu-werkstatt',1,20,1,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='ida' AND class_id=99 LIMIT 1),'tourismustal',1,20,1,2); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='ida' AND class_id=99 LIMIT 1),'kofferdetektiv',1,30,1,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='ida' AND class_id=99 LIMIT 1),'heli',1,40,1,4); +INSERT INTO student_sessions (id, class_id, display_name, created_at, last_seen, country) VALUES ('86dfc304-d381-749b-ab7f-f91286fcee48',99,'Ben','2025-10-01 08:00:00','2026-07-19 12:00:00','AT'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('86dfc304-d381-749b-ab7f-f91286fcee48','farmer',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJoaXRfcmF0ZSI6IDcyLCAieWVhciI6IDExLCAiY3JvcHNfdXNlZCI6IDR9') USING utf8mb4),359000,'2026-06-20 10:04:42'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='ben' AND class_id=99 LIMIT 1),99,'farmer',72,359,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJoaXRfcmF0ZSI6IDcyLCAieWVhciI6IDExLCAiY3JvcHNfdXNlZCI6IDR9') USING utf8mb4),'2026-06-20 10:04:42'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('86dfc304-d381-749b-ab7f-f91286fcee48','klima',99,CONVERT(FROM_BASE64('eyJmaW5hbF90ZW1wZXJhdHVyZSI6IDE2LjUyLCAiZmluYWxfZmxvb2RlZF9wY3QiOiAzNCwgImZpbmFsX2J1ZGdldCI6IDI2MCwgImZpbmFsX2NvMiI6IDQzMSwgImZpbmFsX3BvcHVsYXRpb24iOiAyNTB9') USING utf8mb4),265000,'2026-06-08 13:26:54'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='ben' AND class_id=99 LIMIT 1),99,'klima',66,265,CONVERT(FROM_BASE64('eyJmaW5hbF90ZW1wZXJhdHVyZSI6IDE2LjUyLCAiZmluYWxfZmxvb2RlZF9wY3QiOiAzNCwgImZpbmFsX2J1ZGdldCI6IDI2MCwgImZpbmFsX2NvMiI6IDQzMSwgImZpbmFsX3BvcHVsYXRpb24iOiAyNTB9') USING utf8mb4),'2026-06-08 13:26:54'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('86dfc304-d381-749b-ab7f-f91286fcee48','energiemanager',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJibG9ja3NCYWxhbmNlZCI6IDgsICJibG9ja3NUb3RhbCI6IDEyLCAiZGF5c1BsYXllZCI6IDQsICJkYXlzVG90YWwiOiA2fQ==') USING utf8mb4),347000,'2026-06-06 12:54:04'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='ben' AND class_id=99 LIMIT 1),99,'energiemanager',68,347,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJibG9ja3NCYWxhbmNlZCI6IDgsICJibG9ja3NUb3RhbCI6IDEyLCAiZGF5c1BsYXllZCI6IDQsICJkYXlzVG90YWwiOiA2fQ==') USING utf8mb4),'2026-06-06 12:54:04'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('86dfc304-d381-749b-ab7f-f91286fcee48','fluss',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJiaW9kaXYiOiA3NCwgImVjb25vbXkiOiA3NCwgImZsb29kIjogMjYsICJmb29kIjogNzR9') USING utf8mb4),328000,'2026-07-13 08:01:47'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='ben' AND class_id=99 LIMIT 1),99,'fluss',74,328,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJiaW9kaXYiOiA3NCwgImVjb25vbXkiOiA3NCwgImZsb29kIjogMjYsICJmb29kIjogNzR9') USING utf8mb4),'2026-07-13 08:01:47'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('86dfc304-d381-749b-ab7f-f91286fcee48','tourismustal',99,CONVERT(FROM_BASE64('eyJnb2Fsc0RvbmUiOiA1LCAiZ29hbHNUb3RhbCI6IDYsICJzYXRpc2ZhY3Rpb24iOiA4MSwgIm5hdHVyZSI6IDgxLCAibW9uZXkiOiAxMDB9') USING utf8mb4),152000,'2026-07-13 12:44:45'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='ben' AND class_id=99 LIMIT 1),99,'tourismustal',81,152,CONVERT(FROM_BASE64('eyJnb2Fsc0RvbmUiOiA1LCAiZ29hbHNUb3RhbCI6IDYsICJzYXRpc2ZhY3Rpb24iOiA4MSwgIm5hdHVyZSI6IDgxLCAibW9uZXkiOiAxMDB9') USING utf8mb4),'2026-07-13 12:44:45'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('86dfc304-d381-749b-ab7f-f91286fcee48','heli',99,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiA0LCAicGxhblBjdCI6IDcyLCAic3RhcnRTY29yZSI6IDQsICJsYW5kaW5nU2NvcmUiOiA0fQ==') USING utf8mb4),375000,'2026-07-08 15:39:20'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='ben' AND class_id=99 LIMIT 1),99,'heli',72,375,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiA0LCAicGxhblBjdCI6IDcyLCAic3RhcnRTY29yZSI6IDQsICJsYW5kaW5nU2NvcmUiOiA0fQ==') USING utf8mb4),'2026-07-08 15:39:20'); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='ben' AND class_id=99 LIMIT 1),'farmer',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='ben' AND class_id=99 LIMIT 1),'klima',1,30,1,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='ben' AND class_id=99 LIMIT 1),'energiemanager',1,30,1,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='ben' AND class_id=99 LIMIT 1),'fluss',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='ben' AND class_id=99 LIMIT 1),'tourismustal',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='ben' AND class_id=99 LIMIT 1),'heli',1,40,1,4); +INSERT INTO student_sessions (id, class_id, display_name, created_at, last_seen, country) VALUES ('100a9ed2-8004-6bf3-dd5e-41a392632bd3',99,'Clara','2025-10-01 08:00:00','2026-07-19 12:00:00','AT'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('100a9ed2-8004-6bf3-dd5e-41a392632bd3','sonnensystem',99,CONVERT(FROM_BASE64('eyJjb21wbGV0ZWQiOiAxMiwgInRvdGFsIjogMjAsICJmaXJzdFRyeSI6IGZhbHNlfQ==') USING utf8mb4),516000,'2026-06-02 10:24:25'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='clara' AND class_id=99 LIMIT 1),99,'sonnensystem',62,516,CONVERT(FROM_BASE64('eyJjb21wbGV0ZWQiOiAxMiwgInRvdGFsIjogMjAsICJmaXJzdFRyeSI6IGZhbHNlfQ==') USING utf8mb4),'2026-06-02 10:24:25'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('100a9ed2-8004-6bf3-dd5e-41a392632bd3','eu-werkstatt',99,CONVERT(FROM_BASE64('eyJlbmRUeXBlIjogImFib3J0ZWQiLCAic3RlcHNUb3RhbCI6IDEwLCAiZmlyc3RUcnlIaXRzIjogNiwgInRvdGFsQXR0ZW1wdHMiOiAxMiwgIm11ZWxsZWltZXJDb3VudCI6IDF9') USING utf8mb4),188000,'2026-06-23 14:28:54'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='clara' AND class_id=99 LIMIT 1),99,'eu-werkstatt',56,188,CONVERT(FROM_BASE64('eyJlbmRUeXBlIjogImFib3J0ZWQiLCAic3RlcHNUb3RhbCI6IDEwLCAiZmlyc3RUcnlIaXRzIjogNiwgInRvdGFsQXR0ZW1wdHMiOiAxMiwgIm11ZWxsZWltZXJDb3VudCI6IDF9') USING utf8mb4),'2026-06-23 14:28:54'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('100a9ed2-8004-6bf3-dd5e-41a392632bd3','farmer',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJoaXRfcmF0ZSI6IDc0LCAieWVhciI6IDExLCAiY3JvcHNfdXNlZCI6IDR9') USING utf8mb4),352000,'2026-05-15 08:29:29'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='clara' AND class_id=99 LIMIT 1),99,'farmer',74,352,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJoaXRfcmF0ZSI6IDc0LCAieWVhciI6IDExLCAiY3JvcHNfdXNlZCI6IDR9') USING utf8mb4),'2026-05-15 08:29:29'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('100a9ed2-8004-6bf3-dd5e-41a392632bd3','fluss',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJiaW9kaXYiOiA1OCwgImVjb25vbXkiOiA1OCwgImZsb29kIjogNDIsICJmb29kIjogNTh9') USING utf8mb4),204000,'2026-07-08 13:11:14'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='clara' AND class_id=99 LIMIT 1),99,'fluss',58,204,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJiaW9kaXYiOiA1OCwgImVjb25vbXkiOiA1OCwgImZsb29kIjogNDIsICJmb29kIjogNTh9') USING utf8mb4),'2026-07-08 13:11:14'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('100a9ed2-8004-6bf3-dd5e-41a392632bd3','fluss',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJiaW9kaXYiOiA2MSwgImVjb25vbXkiOiA2MSwgImZsb29kIjogMzksICJmb29kIjogNjF9') USING utf8mb4),150000,'2026-07-19 08:11:22'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='clara' AND class_id=99 LIMIT 1),99,'fluss',61,150,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJiaW9kaXYiOiA2MSwgImVjb25vbXkiOiA2MSwgImZsb29kIjogMzksICJmb29kIjogNjF9') USING utf8mb4),'2026-07-19 08:11:22'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('100a9ed2-8004-6bf3-dd5e-41a392632bd3','heli',99,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiAzLCAicGxhblBjdCI6IDY0LCAic3RhcnRTY29yZSI6IDMsICJsYW5kaW5nU2NvcmUiOiAzfQ==') USING utf8mb4),526000,'2026-07-15 12:58:23'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='clara' AND class_id=99 LIMIT 1),99,'heli',64,526,CONVERT(FROM_BASE64('eyJzdGVybmVHZXNhbXQiOiAzLCAicGxhblBjdCI6IDY0LCAic3RhcnRTY29yZSI6IDMsICJsYW5kaW5nU2NvcmUiOiAzfQ==') USING utf8mb4),'2026-07-15 12:58:23'); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='clara' AND class_id=99 LIMIT 1),'sonnensystem',1,30,1,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='clara' AND class_id=99 LIMIT 1),'eu-werkstatt',1,30,1,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='clara' AND class_id=99 LIMIT 1),'farmer',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='clara' AND class_id=99 LIMIT 1),'fluss',2,60,2,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='clara' AND class_id=99 LIMIT 1),'heli',1,30,1,3); +INSERT INTO student_sessions (id, class_id, display_name, created_at, last_seen, country) VALUES ('d9c65815-39ce-6c05-6280-1c5f87e844e0',99,'Greta','2025-10-01 08:00:00','2026-07-19 12:00:00','AT'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('d9c65815-39ce-6c05-6280-1c5f87e844e0','tourismustal',99,CONVERT(FROM_BASE64('eyJnb2Fsc0RvbmUiOiA0LCAiZ29hbHNUb3RhbCI6IDYsICJzYXRpc2ZhY3Rpb24iOiA2OSwgIm5hdHVyZSI6IDY5LCAibW9uZXkiOiAxMDB9') USING utf8mb4),513000,'2026-06-07 09:50:24'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='greta' AND class_id=99 LIMIT 1),99,'tourismustal',69,513,CONVERT(FROM_BASE64('eyJnb2Fsc0RvbmUiOiA0LCAiZ29hbHNUb3RhbCI6IDYsICJzYXRpc2ZhY3Rpb24iOiA2OSwgIm5hdHVyZSI6IDY5LCAibW9uZXkiOiAxMDB9') USING utf8mb4),'2026-06-07 09:50:24'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('d9c65815-39ce-6c05-6280-1c5f87e844e0','farmer',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJoaXRfcmF0ZSI6IDcxLCAieWVhciI6IDExLCAiY3JvcHNfdXNlZCI6IDR9') USING utf8mb4),190000,'2026-06-24 08:16:11'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='greta' AND class_id=99 LIMIT 1),99,'farmer',71,190,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJoaXRfcmF0ZSI6IDcxLCAieWVhciI6IDExLCAiY3JvcHNfdXNlZCI6IDR9') USING utf8mb4),'2026-06-24 08:16:11'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('d9c65815-39ce-6c05-6280-1c5f87e844e0','kofferdetektiv',99,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA0LCAiY29ycmVjdF9maXJzdF90cnkiOiA0LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDQuMn0=') USING utf8mb4),523000,'2026-05-16 08:58:02'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='greta' AND class_id=99 LIMIT 1),99,'kofferdetektiv',64,523,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA0LCAiY29ycmVjdF9maXJzdF90cnkiOiA0LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDQuMn0=') USING utf8mb4),'2026-05-16 08:58:02'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('d9c65815-39ce-6c05-6280-1c5f87e844e0','logistik',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJvcmRlcnNEZWxpdmVyZWQiOiA3LCAidG90YWxPcmRlcnMiOiAxMCwgIm9yZGVyc0xhdGUiOiAwLCAiZmluYWxCYWxhbmNlIjogNjAwfQ==') USING utf8mb4),561000,'2026-07-19 10:30:17'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='greta' AND class_id=99 LIMIT 1),99,'logistik',70,561,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJvcmRlcnNEZWxpdmVyZWQiOiA3LCAidG90YWxPcmRlcnMiOiAxMCwgIm9yZGVyc0xhdGUiOiAwLCAiZmluYWxCYWxhbmNlIjogNjAwfQ==') USING utf8mb4),'2026-07-19 10:30:17'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('d9c65815-39ce-6c05-6280-1c5f87e844e0','weltkueche',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJjb21wbGV0ZWREaXNoZXMiOiA4LCAidG90YWxEaXNoZXMiOiAxMCwgIm1pc3Rha2VzSW5EaXNoIjogM30=') USING utf8mb4),452000,'2026-07-08 09:08:00'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='greta' AND class_id=99 LIMIT 1),99,'weltkueche',77,452,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJjb21wbGV0ZWREaXNoZXMiOiA4LCAidG90YWxEaXNoZXMiOiAxMCwgIm1pc3Rha2VzSW5EaXNoIjogM30=') USING utf8mb4),'2026-07-08 09:08:00'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('d9c65815-39ce-6c05-6280-1c5f87e844e0','kofferdetektiv',99,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA0LCAiY29ycmVjdF9maXJzdF90cnkiOiA0LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDMuOX0=') USING utf8mb4),494000,'2026-07-19 09:22:33'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='greta' AND class_id=99 LIMIT 1),99,'kofferdetektiv',68,494,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA0LCAiY29ycmVjdF9maXJzdF90cnkiOiA0LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDMuOX0=') USING utf8mb4),'2026-07-19 09:22:33'); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='greta' AND class_id=99 LIMIT 1),'tourismustal',1,30,1,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='greta' AND class_id=99 LIMIT 1),'farmer',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='greta' AND class_id=99 LIMIT 1),'kofferdetektiv',2,60,2,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='greta' AND class_id=99 LIMIT 1),'logistik',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='greta' AND class_id=99 LIMIT 1),'weltkueche',1,40,1,4); +INSERT INTO student_sessions (id, class_id, display_name, created_at, last_seen, country) VALUES ('5d0e8345-23d5-601a-9dc9-7e78d8651909',99,'Jakob','2025-10-01 08:00:00','2026-07-19 12:00:00','AT'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5d0e8345-23d5-601a-9dc9-7e78d8651909','busfahrt',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJ3b25PcmRlcnMiOiA3LCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogNywgImF2Z1RhcEttIjogNTR9') USING utf8mb4),136000,'2026-06-04 15:50:28'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='jakob_s' AND class_id=99 LIMIT 1),99,'busfahrt',86,136,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJ3b25PcmRlcnMiOiA3LCAidG90YWxPcmRlcnMiOiA4LCAicXVpekZpcnN0VHJ5IjogNywgImF2Z1RhcEttIjogNTR9') USING utf8mb4),'2026-06-04 15:50:28'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5d0e8345-23d5-601a-9dc9-7e78d8651909','kofferdetektiv',99,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA1LCAiY29ycmVjdF9maXJzdF90cnkiOiA1LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDIuNH0=') USING utf8mb4),405000,'2026-06-10 14:38:31'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='jakob_s' AND class_id=99 LIMIT 1),99,'kofferdetektiv',84,405,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA1LCAiY29ycmVjdF9maXJzdF90cnkiOiA1LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDIuNH0=') USING utf8mb4),'2026-06-10 14:38:31'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5d0e8345-23d5-601a-9dc9-7e78d8651909','tourismustal',99,CONVERT(FROM_BASE64('eyJnb2Fsc0RvbmUiOiA1LCAiZ29hbHNUb3RhbCI6IDYsICJzYXRpc2ZhY3Rpb24iOiA3NywgIm5hdHVyZSI6IDc3LCAibW9uZXkiOiAxMDB9') USING utf8mb4),597000,'2026-06-24 08:47:36'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='jakob_s' AND class_id=99 LIMIT 1),99,'tourismustal',77,597,CONVERT(FROM_BASE64('eyJnb2Fsc0RvbmUiOiA1LCAiZ29hbHNUb3RhbCI6IDYsICJzYXRpc2ZhY3Rpb24iOiA3NywgIm5hdHVyZSI6IDc3LCAibW9uZXkiOiAxMDB9') USING utf8mb4),'2026-06-24 08:47:36'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5d0e8345-23d5-601a-9dc9-7e78d8651909','weltkueche',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJjb21wbGV0ZWREaXNoZXMiOiA3LCAidG90YWxEaXNoZXMiOiAxMCwgIm1pc3Rha2VzSW5EaXNoIjogNH0=') USING utf8mb4),376000,'2026-07-13 14:30:03'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='jakob_s' AND class_id=99 LIMIT 1),99,'weltkueche',74,376,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJjb21wbGV0ZWREaXNoZXMiOiA3LCAidG90YWxEaXNoZXMiOiAxMCwgIm1pc3Rha2VzSW5EaXNoIjogNH0=') USING utf8mb4),'2026-07-13 14:30:03'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5d0e8345-23d5-601a-9dc9-7e78d8651909','logistik',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJvcmRlcnNEZWxpdmVyZWQiOiA3LCAidG90YWxPcmRlcnMiOiAxMCwgIm9yZGVyc0xhdGUiOiAwLCAiZmluYWxCYWxhbmNlIjogNjAwfQ==') USING utf8mb4),245000,'2026-07-16 15:08:49'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='jakob_s' AND class_id=99 LIMIT 1),99,'logistik',70,245,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJvcmRlcnNEZWxpdmVyZWQiOiA3LCAidG90YWxPcmRlcnMiOiAxMCwgIm9yZGVyc0xhdGUiOiAwLCAiZmluYWxCYWxhbmNlIjogNjAwfQ==') USING utf8mb4),'2026-07-16 15:08:49'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5d0e8345-23d5-601a-9dc9-7e78d8651909','tourismustal',99,CONVERT(FROM_BASE64('eyJnb2Fsc0RvbmUiOiA1LCAiZ29hbHNUb3RhbCI6IDYsICJzYXRpc2ZhY3Rpb24iOiA4NCwgIm5hdHVyZSI6IDg0LCAibW9uZXkiOiAxMDB9') USING utf8mb4),234000,'2026-07-18 14:56:13'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='jakob_s' AND class_id=99 LIMIT 1),99,'tourismustal',84,234,CONVERT(FROM_BASE64('eyJnb2Fsc0RvbmUiOiA1LCAiZ29hbHNUb3RhbCI6IDYsICJzYXRpc2ZhY3Rpb24iOiA4NCwgIm5hdHVyZSI6IDg0LCAibW9uZXkiOiAxMDB9') USING utf8mb4),'2026-07-18 14:56:13'); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='jakob_s' AND class_id=99 LIMIT 1),'busfahrt',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='jakob_s' AND class_id=99 LIMIT 1),'kofferdetektiv',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='jakob_s' AND class_id=99 LIMIT 1),'tourismustal',2,80,2,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='jakob_s' AND class_id=99 LIMIT 1),'weltkueche',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='jakob_s' AND class_id=99 LIMIT 1),'logistik',1,40,1,4); +INSERT INTO student_sessions (id, class_id, display_name, created_at, last_seen, country) VALUES ('5fa5c0e3-214d-e523-b81f-d2866dd6ad07',99,'Marlene','2025-10-01 08:00:00','2026-07-19 12:00:00','AT'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5fa5c0e3-214d-e523-b81f-d2866dd6ad07','weltkueche',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJjb21wbGV0ZWREaXNoZXMiOiA2LCAidG90YWxEaXNoZXMiOiAxMCwgIm1pc3Rha2VzSW5EaXNoIjogNX0=') USING utf8mb4),437000,'2026-05-28 12:20:08'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='marlene' AND class_id=99 LIMIT 1),99,'weltkueche',64,437,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJjb21wbGV0ZWREaXNoZXMiOiA2LCAidG90YWxEaXNoZXMiOiAxMCwgIm1pc3Rha2VzSW5EaXNoIjogNX0=') USING utf8mb4),'2026-05-28 12:20:08'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5fa5c0e3-214d-e523-b81f-d2866dd6ad07','klima',99,CONVERT(FROM_BASE64('eyJmaW5hbF90ZW1wZXJhdHVyZSI6IDE2LjU1LCAiZmluYWxfZmxvb2RlZF9wY3QiOiAzNSwgImZpbmFsX2J1ZGdldCI6IDI1MCwgImZpbmFsX2NvMiI6IDQzMiwgImZpbmFsX3BvcHVsYXRpb24iOiAyNTB9') USING utf8mb4),171000,'2026-06-14 15:32:07'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='marlene' AND class_id=99 LIMIT 1),99,'klima',65,171,CONVERT(FROM_BASE64('eyJmaW5hbF90ZW1wZXJhdHVyZSI6IDE2LjU1LCAiZmluYWxfZmxvb2RlZF9wY3QiOiAzNSwgImZpbmFsX2J1ZGdldCI6IDI1MCwgImZpbmFsX2NvMiI6IDQzMiwgImZpbmFsX3BvcHVsYXRpb24iOiAyNTB9') USING utf8mb4),'2026-06-14 15:32:07'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5fa5c0e3-214d-e523-b81f-d2866dd6ad07','klima',99,CONVERT(FROM_BASE64('eyJmaW5hbF90ZW1wZXJhdHVyZSI6IDE2LjQzLCAiZmluYWxfZmxvb2RlZF9wY3QiOiAzMSwgImZpbmFsX2J1ZGdldCI6IDI5MCwgImZpbmFsX2NvMiI6IDQyNiwgImZpbmFsX3BvcHVsYXRpb24iOiAyNTB9') USING utf8mb4),466000,'2026-05-16 13:16:38'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='marlene' AND class_id=99 LIMIT 1),99,'klima',69,466,CONVERT(FROM_BASE64('eyJmaW5hbF90ZW1wZXJhdHVyZSI6IDE2LjQzLCAiZmluYWxfZmxvb2RlZF9wY3QiOiAzMSwgImZpbmFsX2J1ZGdldCI6IDI5MCwgImZpbmFsX2NvMiI6IDQyNiwgImZpbmFsX3BvcHVsYXRpb24iOiAyNTB9') USING utf8mb4),'2026-05-16 13:16:38'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5fa5c0e3-214d-e523-b81f-d2866dd6ad07','farmer',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJoaXRfcmF0ZSI6IDY4LCAieWVhciI6IDEwLCAiY3JvcHNfdXNlZCI6IDR9') USING utf8mb4),186000,'2026-07-14 09:30:21'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='marlene' AND class_id=99 LIMIT 1),99,'farmer',68,186,CONVERT(FROM_BASE64('eyJzdGFycyI6IDMsICJoaXRfcmF0ZSI6IDY4LCAieWVhciI6IDEwLCAiY3JvcHNfdXNlZCI6IDR9') USING utf8mb4),'2026-07-14 09:30:21'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5fa5c0e3-214d-e523-b81f-d2866dd6ad07','eu-werkstatt',99,CONVERT(FROM_BASE64('eyJlbmRUeXBlIjogInN1Y2Nlc3MiLCAic3RlcHNUb3RhbCI6IDEwLCAiZmlyc3RUcnlIaXRzIjogNywgInRvdGFsQXR0ZW1wdHMiOiAxMiwgIm11ZWxsZWltZXJDb3VudCI6IDB9') USING utf8mb4),214000,'2026-07-12 08:55:12'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='marlene' AND class_id=99 LIMIT 1),99,'eu-werkstatt',68,214,CONVERT(FROM_BASE64('eyJlbmRUeXBlIjogInN1Y2Nlc3MiLCAic3RlcHNUb3RhbCI6IDEwLCAiZmlyc3RUcnlIaXRzIjogNywgInRvdGFsQXR0ZW1wdHMiOiAxMiwgIm11ZWxsZWltZXJDb3VudCI6IDB9') USING utf8mb4),'2026-07-12 08:55:12'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('5fa5c0e3-214d-e523-b81f-d2866dd6ad07','sonnensystem',99,CONVERT(FROM_BASE64('eyJjb21wbGV0ZWQiOiAxMywgInRvdGFsIjogMjAsICJmaXJzdFRyeSI6IGZhbHNlfQ==') USING utf8mb4),198000,'2026-07-17 10:35:17'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='marlene' AND class_id=99 LIMIT 1),99,'sonnensystem',63,198,CONVERT(FROM_BASE64('eyJjb21wbGV0ZWQiOiAxMywgInRvdGFsIjogMjAsICJmaXJzdFRyeSI6IGZhbHNlfQ==') USING utf8mb4),'2026-07-17 10:35:17'); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='marlene' AND class_id=99 LIMIT 1),'weltkueche',1,30,1,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='marlene' AND class_id=99 LIMIT 1),'klima',2,60,2,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='marlene' AND class_id=99 LIMIT 1),'farmer',1,30,1,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='marlene' AND class_id=99 LIMIT 1),'eu-werkstatt',1,30,1,3); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='marlene' AND class_id=99 LIMIT 1),'sonnensystem',1,30,1,3); +INSERT INTO student_sessions (id, class_id, display_name, created_at, last_seen, country) VALUES ('decc2aab-27fe-cd71-2778-cced389c7b35',99,'Olivia','2025-10-01 08:00:00','2026-07-19 12:00:00','AT'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('decc2aab-27fe-cd71-2778-cced389c7b35','tourismusregion',99,CONVERT(FROM_BASE64('eyJzY29yZSI6IDg3fQ==') USING utf8mb4),373000,'2026-06-09 08:50:52'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='olivia' AND class_id=99 LIMIT 1),99,'tourismusregion',87,373,CONVERT(FROM_BASE64('eyJzY29yZSI6IDg3fQ==') USING utf8mb4),'2026-06-09 08:50:52'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('decc2aab-27fe-cd71-2778-cced389c7b35','fluss',99,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJiaW9kaXYiOiA4OSwgImVjb25vbXkiOiA4OSwgImZsb29kIjogMTEsICJmb29kIjogODl9') USING utf8mb4),351000,'2026-06-25 13:31:16'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='olivia' AND class_id=99 LIMIT 1),99,'fluss',89,351,CONVERT(FROM_BASE64('eyJzdGFycyI6IDQsICJiaW9kaXYiOiA4OSwgImVjb25vbXkiOiA4OSwgImZsb29kIjogMTEsICJmb29kIjogODl9') USING utf8mb4),'2026-06-25 13:31:16'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('decc2aab-27fe-cd71-2778-cced389c7b35','kofferdetektiv',99,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA2LCAiY29ycmVjdF9maXJzdF90cnkiOiA2LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDEuNn0=') USING utf8mb4),179000,'2026-05-28 12:00:17'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='olivia' AND class_id=99 LIMIT 1),99,'kofferdetektiv',93,179,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA2LCAiY29ycmVjdF9maXJzdF90cnkiOiA2LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDEuNn0=') USING utf8mb4),'2026-05-28 12:00:17'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('decc2aab-27fe-cd71-2778-cced389c7b35','tourismusregion',99,CONVERT(FROM_BASE64('eyJzY29yZSI6IDgxfQ==') USING utf8mb4),580000,'2026-07-14 11:30:30'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='olivia' AND class_id=99 LIMIT 1),99,'tourismusregion',81,580,CONVERT(FROM_BASE64('eyJzY29yZSI6IDgxfQ==') USING utf8mb4),'2026-07-14 11:30:30'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('decc2aab-27fe-cd71-2778-cced389c7b35','kofferdetektiv',99,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA1LCAiY29ycmVjdF9maXJzdF90cnkiOiA1LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDIuN30=') USING utf8mb4),381000,'2026-07-14 09:05:10'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='olivia' AND class_id=99 LIMIT 1),99,'kofferdetektiv',81,381,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA1LCAiY29ycmVjdF9maXJzdF90cnkiOiA1LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDIuN30=') USING utf8mb4),'2026-07-14 09:05:10'); +INSERT INTO assessments (session_id, sim_id, class_id, results, duration_ms, submitted_at) VALUES ('decc2aab-27fe-cd71-2778-cced389c7b35','kofferdetektiv',99,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA1LCAiY29ycmVjdF9maXJzdF90cnkiOiA1LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDIuM30=') USING utf8mb4),520000,'2026-07-16 11:35:02'); +INSERT INTO student_results (student_id, class_id, module_id, score, duration_sec, detail_json, completed_at) VALUES ((SELECT id FROM students WHERE username='olivia' AND class_id=99 LIMIT 1),99,'kofferdetektiv',86,520,CONVERT(FROM_BASE64('eyJjYXNlc190b3RhbCI6IDYsICJjYXNlc19zb2x2ZWQiOiA1LCAiY29ycmVjdF9maXJzdF90cnkiOiA1LCAid3JvbmdfZ3Vlc3NlcyI6IDAsICJoaW50c191c2VkX2F2ZyI6IDIuM30=') USING utf8mb4),'2026-07-16 11:35:02'); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='olivia' AND class_id=99 LIMIT 1),'tourismusregion',2,80,2,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='olivia' AND class_id=99 LIMIT 1),'fluss',1,40,1,4); +INSERT INTO player_progress (student_id, sim_id, level, xp, plays, best_stars) VALUES ((SELECT id FROM students WHERE username='olivia' AND class_id=99 LIMIT 1),'kofferdetektiv',2,135,3,5); +SET FOREIGN_KEY_CHECKS=1; diff --git a/App/php/api/live.php b/App/php/api/live.php index 41f28f1..3773af0 100644 --- a/App/php/api/live.php +++ b/App/php/api/live.php @@ -605,6 +605,39 @@ if ($method === 'GET') { $benchByStudent[$sid]['n']++; } + // 4b) RECENCY — Grundlage für die Interventions-Empfehlung: nur die AKTUELLE + // Leistung zählt (kein Allzeit-Rückblick). Aus student_results: + // recentErfolg = Ø der letzten 3 Läufe · daysSince = Tage seit letztem Lauf + // recentPlays = Läufe der letzten 14 Tage + $recentByStudent = []; + foreach ($db->fetchAll( + "SELECT student_id, + DATEDIFF(NOW(), MAX(completed_at)) AS days_since, + SUM(completed_at >= NOW() - INTERVAL 14 DAY) AS recent_plays + FROM student_results WHERE class_id = ? GROUP BY student_id", + [$classId]) as $r) { + $recentByStudent[(int)$r['student_id']] = [ + 'daysSince' => $r['days_since'] !== null ? (int)$r['days_since'] : null, + 'recentPlays' => (int)$r['recent_plays'], + 'recentErfolg' => null, + ]; + } + foreach ($db->fetchAll( + "SELECT student_id, + ROUND(AVG(CASE WHEN rn <= 3 THEN score END)) AS recent_erfolg, + ROUND(AVG(CASE WHEN rn > 3 THEN score END)) AS early_erfolg + FROM ( + SELECT student_id, score, + ROW_NUMBER() OVER (PARTITION BY student_id ORDER BY completed_at DESC, id DESC) rn + FROM student_results WHERE class_id = ? + ) x GROUP BY student_id", + [$classId]) as $r) { + $sid = (int)$r['student_id']; + if (!isset($recentByStudent[$sid])) $recentByStudent[$sid] = ['daysSince'=>null,'recentPlays'=>0,'recentErfolg'=>null]; + $recentByStudent[$sid]['recentErfolg'] = $r['recent_erfolg'] !== null ? (int)$r['recent_erfolg'] : null; + $recentByStudent[$sid]['earlyErfolg'] = $r['early_erfolg'] !== null ? (int)$r['early_erfolg'] : null; + } + // 5) needsHelp-Heuristik aus Live-State (pro aktivem Schüler:in) $needsHelp = function($simId, $state) { if (!is_array($state)) return false; @@ -701,6 +734,10 @@ if ($method === 'GET') { 'lastSeen' => $lastSeen, 'lastSeenTs' => $lastSeen ? strtotime($lastSeen) : null, 'benchmarkPct' => $bench, + 'recentErfolg' => $recentByStudent[$sid]['recentErfolg'] ?? null, + 'earlyErfolg' => $recentByStudent[$sid]['earlyErfolg'] ?? null, + 'daysSince' => $recentByStudent[$sid]['daysSince'] ?? null, + 'recentPlays' => $recentByStudent[$sid]['recentPlays'] ?? 0, 'activeSim' => $active ? $active['module_id'] : null, 'activeSimName'=> $active && isset($moduleMap[$active['module_id']]) ? $moduleMap[$active['module_id']]['title'] : null, 'activeSimIcon'=> $active && isset($moduleMap[$active['module_id']]) ? $moduleMap[$active['module_id']]['icon'] : null, diff --git a/App/teacher.html b/App/teacher.html index ac502f1..3b1aed8 100644 --- a/App/teacher.html +++ b/App/teacher.html @@ -2111,9 +2111,10 @@ var IV_CSS = '' + '.iv-ic svg{width:19px;height:19px;stroke:currentColor;stroke-width:1.9;fill:none;stroke-linecap:round;stroke-linejoin:round}' + '.iv-ct{flex:1}.iv-ct h4{margin:0;font-size:.9rem;font-weight:750;color:var(--iva)}.iv-ct p{margin:0;font-size:.72rem;color:var(--ivmut)}' + '.iv-cn{font-size:1.05rem;font-weight:750;color:var(--iva)}' -+ '.iv-cols{display:grid;grid-template-columns:78px 1fr 30px 58px 14px;gap:9px;padding:0 8px 3px;font-size:.54rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--ivmut);border-bottom:1px solid var(--ivline)}' -+ '.iv-cols span:nth-child(2){justify-self:end}.iv-cols span:nth-child(3),.iv-cols span:nth-child(4){justify-self:center}' -+ '.iv-prow{display:grid;grid-template-columns:78px 1fr 30px 58px 14px;gap:9px;align-items:center;width:100%;text-align:left;cursor:pointer;background:none;border:0;border-radius:8px;padding:7px 8px;font:inherit;color:inherit}' ++ '.iv-cols{display:grid;grid-template-columns:72px 1fr 28px 50px 46px 14px;gap:9px;padding:0 8px 3px;font-size:.52rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--ivmut);border-bottom:1px solid var(--ivline)}' ++ '.iv-cols span:nth-child(2){justify-self:end}.iv-cols span:nth-child(3),.iv-cols span:nth-child(4){justify-self:center}.iv-cols span:nth-child(5){justify-self:end}' ++ '.iv-prow{display:grid;grid-template-columns:72px 1fr 28px 50px 46px 14px;gap:9px;align-items:center;width:100%;text-align:left;cursor:pointer;background:none;border:0;border-radius:8px;padding:7px 8px;font:inherit;color:inherit}' ++ '.iv-last{justify-self:end;font-size:.7rem;color:var(--ivmut);white-space:nowrap}.iv-last-old{color:var(--ivr);font-weight:700}' + '.iv-prow:hover{background:var(--ivsoft)}' + '.iv-nm{font-size:.86rem;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}' + '.iv-erf{display:flex;align-items:center;gap:7px;justify-self:end}.iv-ebar{width:70px;height:9px;border-radius:5px;background:var(--ivtrack);overflow:hidden}.iv-ebar>i{display:block;height:100%;border-radius:5px}.iv-erf b{font-size:.78rem;font-weight:700;width:1.7em}' @@ -2161,18 +2162,27 @@ var IV_ICON={ work:'', good:'', idle:''}; -var IV_META={support:['Fördern','strengen sich an, kommen nicht weiter','--ivns'],more:['Fordern','lösen sicher, kaum ausgelastet','--ivnm'], - work:['Begleiten','viel Aktivität, wenig Ertrag','--ivnw'],good:['Bestätigen','noch nicht am Ziel, aber im Aufwind','--ivngd'],idle:['Beteiligen','kaum Daten – zuerst ins Arbeiten holen','--ivni']}; +var IV_META={support:['Fördern','zuletzt schwächere Läufe','--ivns'],more:['Fordern','zuletzt sicher, kaum gefordert','--ivnm'], + work:['Begleiten','zuletzt viel gearbeitet, wenig Ertrag','--ivnw'],good:['Bestätigen','zuletzt besser geworden','--ivngd'],idle:['Nachfassen','länger nicht mehr dran (oder noch nie)','--ivni']}; -// Triage-Zuordnung aus Erfolg (benchmarkPct) × Beteiligung (plays) + Verlaufs-Trend. -function ivTriage(erfolg, plays, rising){ - if (plays < 2 || erfolg==null) return 'idle'; - if (erfolg < 48 && plays >= 9) return 'work'; - if (erfolg < 48) return 'support'; - if (erfolg >= 65 && plays < 6) return 'more'; - if (erfolg < 65 && rising) return 'good'; +// Triage NUR aus der AKTUELLEN Leistung (Empfehlung = Reaktion auf das Zuletzt- +// Gesehene, kein Allzeit-Rückblick): recentErfolg = Ø letzte 3 Läufe, daysSince = +// Tage seit letztem Lauf, recentPlays = Läufe der letzten 14 Tage, rising = +// zuletzt besser als der bisherige Schnitt. +function ivTriage(recErf, daysSince, recentPlays, rising){ + if (daysSince == null || daysSince > 14) return 'idle'; // länger nicht dran / nie + if (recErf == null) return 'idle'; + if (recErf < 48 && recentPlays >= 5) return 'work'; // zuletzt viel, wenig Ertrag + if (recErf < 48) return 'support'; // zuletzt schwach + if (recErf >= 65 && recentPlays <= 2) return 'more'; // zuletzt sicher, kaum gefordert + if (rising) return 'good'; // zuletzt besser geworden return null; // läuft rund } +function ivZuletzt(days){ + if (days == null) return 'nie'; + var t = days<=0 ? 'heute' : (days==1 ? 'gestern' : 'vor '+days+' T'); + return ''+t+''; +} function ivBuildOverview(cockpit, weeks, studentsCount, matrix){ ivInjectCss(); @@ -2188,17 +2198,19 @@ function ivBuildOverview(cockpit, weeks, studentsCount, matrix){ var groups={support:[],more:[],work:[],good:[],idle:[]}, calm=[], erfSum=0,erfN=0, weekTotals=[]; cs.forEach(function(s){ - var sid=s.studentId||s.id, erf=(s.benchmarkPct!=null)?s.benchmarkPct:null, plays=playsById[sid]||0; + var sid=s.studentId||s.id; + var recErf=(s.recentErfolg!=null)?s.recentErfolg:null; // Ø letzte 3 Läufe + var allErf=(s.benchmarkPct!=null)?s.benchmarkPct:null; // Allzeit (nur für „rising") + var days=(s.daysSince!=null)?s.daysSince:null; + var rplays=s.recentPlays||0; var w=wById[sid], secs=w?w.buckets.map(function(b){return Math.min(IV_WEEK_CAP, b.sum||0);}):[]; while(secs.length<10) secs.unshift(0); secs.forEach(function(v){ if(v>maxSec) maxSec=v; }); - // Trend: Mittel letzte 3 vs erste 3 - var last3=secs.slice(-3).reduce(function(a,b){return a+b;},0), first3=secs.slice(0,3).reduce(function(a,b){return a+b;},0); - var rising = last3>first3*1.2 && last3>0; - if(erf!=null){ erfSum+=erf; erfN++; } + var rising=(recErf!=null && s.earlyErfolg!=null && recErf > s.earlyErfolg+10); // letzte 3 besser als frühere + if(recErf!=null){ erfSum+=recErf; erfN++; } weekTotals.push(secs); - var g=ivTriage(erf,plays,rising); - var row={name:s.displayName,erf:erf,status:s.status,secs:secs}; + var g=ivTriage(recErf, days, rplays, rising); + var row={name:s.displayName, erf:recErf, status:s.status, secs:secs, days:days}; if(g) groups[g].push(row); else calm.push(s.displayName); }); @@ -2215,7 +2227,7 @@ function ivBuildOverview(cockpit, weeks, studentsCount, matrix){ h+='
Klassenübersicht
'; // Stat-Karten h+='
'; - h+='
Erfolg Klassenschnitt
'+(erfAvg!=null?erfAvg:'–')+'
0 – 100, Mittel über alle Module
'; + h+='
Erfolg Klassenschnitt
'+(erfAvg!=null?erfAvg:'–')+'
0 – 100, aus den letzten Läufen
'; h+='
Aktuell aktiv
'+aktiv+' aktiv · '+idle+' teilweise · '+rest+' inaktiv
'; h+='
Verlauf Klassenschnittmax '+maxLabel+'
'+classWeeks.map(function(sec){var frac=sec/classMax;var cls=sec<=0?'iv-z':(frac<.2?'iv-r':frac<.4?'iv-o':frac<.62?'iv-y':frac<.82?'iv-li':'iv-g');return '';}).join('')+'
aktive Zeit pro Woche · 10 Wochen
'; h+='
Schüler:innen
'+studentsCount+'
'+aktiv+' gerade aktiv
'; @@ -2228,9 +2240,9 @@ function ivBuildOverview(cockpit, weeks, studentsCount, matrix){ var rows=groups[key]; if(!rows.length) return; var m=IV_META[key]; h+='
'+IV_ICON[key]+'

'+m[0]+'

'+m[1]+'

'+rows.length+'
'; - h+='
ErfolgAktivVerlauf
'; + h+='
ErfolgAktivVerlaufZuletzt
'; rows.forEach(function(r){ - h+=''; + h+=''; }); h+='
'; }); @@ -2238,13 +2250,16 @@ function ivBuildOverview(cockpit, weeks, studentsCount, matrix){ if(calm.length) h+='
Läuft rund — '+calm.length+''+calm.map(esc).join(' · ')+'
'; // Legende h+='
' - +'
Erfolg Wie gut die Simulation gemeistert wird, 0 – 100. Normiert: 0 = gescheitert, 100 = „sehr gut" (90 % des Bestwerts). Beispiel: 56 = solide über dem Durchschnitt.' + +'
Die Empfehlung beruht nur auf der aktuellen Leistung: dem Erfolg der letzten Läufe und den Tagen seit dem letzten Mal. Der Verlauf daneben ist nur Historie.
' + +'
Erfolg Ø der letzten 3 Läufe (aktueller Stand), 0 – 100: 0 = gescheitert, 100 = „sehr gut". Alte Durchläufe zählen für die Empfehlung nicht mehr mit.' +'
rot → grün
' + +'
Zuletzt Tage seit dem letzten Lauf. Wer länger als 14 Tage nicht mehr dran war (oder noch nie), landet bei „Nachfassen" — unabhängig von früheren Werten.' + +'
heute·vor 20 T
' +'
Aktuell aktiv Interaktionen der letzten Minuten, live. Blinkt bei jeder Eingabe.' +'
aktiv' +'teilweise' +'inaktiv (10 Min nichts)
' - +'
Verlauf Aktive Zeit pro Woche, letzte 10 Wochen, gleiches Raster für alle. Farbe = Aktivität der Woche; rote Kappe = bei 3 h gedeckelt.' + +'
Verlauf Aktive Zeit pro Woche, letzte 10 Wochen — nur Historie, nicht Grundlage der Empfehlung. Rote Kappe = bei 3 h gedeckelt.' +'
wenig → viel
' +'
'; h+='
';