351251d652
feat(quantik-game): фаза 1 — оболочка игры + физ-уровень + прогресс (MVP) Страница /quantik монтирует уровень-спеку в SimEngine (игровой режим: HUD из Ф0 + слайдеры закона + play/reset), на победу шлёт результат и показывает экран успеха (звёзды/время/попытки, inline SVG). Уровень phys-artillery-1 как данные (levels.js): гравитация + запуск тела из угла/скорости, портал, бонус-звезда. Бэкенд: миграция 076 game_progress (UNIQUE user+level), /api/game/progress (GET свой / POST upsert best time/stars, attempts++, auth-only, валидация входа), клиент LS.gameProgress*, пункт сайдбара. game.test.js 13/13; npm test 251 pass/8 baseline; lint:routes 0. Уровень проверен на реальном интеграторе (311 выигрышных комбо, 31 на 3★). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> @
17 lines
772 B
JavaScript
17 lines
772 B
JavaScript
'use strict';
|
|
/* /api/game — прогресс игрока в игре «Квантик — Законы Мира» (Фаза 1).
|
|
* Все роуты — auth-only (играют и ученики). router.use(authMiddleware)
|
|
* → lint:routes baseline 0. Прогресс всегда принадлежит req.user — нет
|
|
* межпользовательских роутов, проверка владения не требуется. */
|
|
const express = require('express');
|
|
const router = express.Router();
|
|
const { authMiddleware } = require('../middleware/auth');
|
|
const c = require('../controllers/gameController');
|
|
|
|
router.use(authMiddleware);
|
|
|
|
router.get('/progress', c.listProgress);
|
|
router.post('/progress', c.submitProgress);
|
|
|
|
module.exports = router;
|