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

48 lines
3.5 KiB
Markdown

# Phase 6: Раздача / шаблоны / клон / программа
**Status:** ⬜ Not Started
**Parent plan:** [PLAN.md](./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
<!-- Заполняет реализатор -->