Files
Learn_System/plans/sim-builder/phase-6-sharing.md
T

3.5 KiB

Phase 6: Раздача / шаблоны / клон / программа

Status: Not Started Parent plan: PLAN.md Domain: fullstack

Objective

Экосистема вокруг custom-sims: публикация, раздача классу, клонирование чужих, старт из шаблонов, привязка к программе (учебник/тема).

Tasks

  • Публикация: тумблер draft↔published в билдере/каталоге (PUT status). Только владелец/админ.
  • Раздача классу: POST /api/custom-sims/:id/share { classId } — по паттерну «Мои материалы» (shareMaterial): ученики класса получают доступ/уведомление. Решить — ссылка-доступ или копия (рекоменд.: доступ-ссылка на published + запись в lab_sim_links/доступ; копия избыточна).
  • Клон: POST /api/custom-sims/:id/clone — копия спеки новому владельцу (draft). Кнопка «Клонировать» на чужой published-карточке.
  • Шаблоны: набор стартовых спек (встроенные JSON-фикстуры: пустая, маятник, график, бросок) → «Создать из шаблона» в билдере; «Создать из существующей» = clone.
  • Привязка к программе: переиспользовать lab_sim_links (kind=textbook|topic) для custom:<id>; чип «Связано с программой» (как у встроенных, _loadRelated) и кнопка «В лабораторию» с карточки учебника.
  • Тесты: share (доступ ученику), clone (новый владелец, draft), ownership на публикации.

Files to Modify/Create

  • backend/src/controllers/customSimController.js — share/clone/publish (modify)
  • backend/src/routes/customSims.js — роуты share/clone (modify)
  • backend/src/controllers/.../lab links — связи для custom (reuse lab.js links, modify при необходимости)
  • frontend/sim-builder.html / frontend/js/labs/lab-glue.js — шаблоны, кнопки публикации/клона/раздачи (modify)
  • js/api.js — методы share/clone (modify)
  • backend/tests/custom-sims-share.test.js (new)

Acceptance Criteria

  • Учитель публикует; другой учитель видит и клонирует к себе (draft).
  • Выданная классу симуляция доступна ученикам класса (с уведомлением).
  • Старт из шаблона создаёт рабочую заготовку. Привязка к учебнику показывает чип/кнопку.

Notes

  • Раздача — переиспользовать существующий механизм доступа/уведомлений, не строить новый.
  • Решение копия-vs-ссылка зафиксировать в CONTEXT.md.

Review Checklist

  • Все задачи выполнены
  • Ownership на publish/share/clone покрыт тестами
  • Ученик класса получает доступ; чужой — нет
  • Reuse материалов/доступа/links, без дублей

Handoff to Next Phase