48 lines
3.5 KiB
Markdown
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
|
|
<!-- Заполняет реализатор -->
|