Entities
src/modules/**/schemas/*.schemas.ts
BE-сутності academy у MongoDB. Колекції — academy_*. У колонці «Сутність» — лінк на entity-сторінку, або — якщо окремої сторінки нема (лог/буфер/сміття або просто ще не написана).
| Сутність | Колекція | Призначення |
|---|---|---|
| course | academy_courses | Курс — групує модулі, mentors, trainees |
| module | academy_modules | Модуль — групує уроки в логічну тему всередині курсу |
| lesson | academy_lessons | Урок у модулі. Поліморфний контент: текст / медіа / зображення / тест |
| answer | academy_answers | Відповіді уроку Trainee. Один документ на пару (lessonId, traineeId) |
DB-аудит (індекси / плани запитів)
Health-аудит колекцій по даних з DB Analytics (technical_department/db_analytics у stack) — індекси, плани, COLLSCAN, фрагментація. Метод і знімки фрагментації спільної бази — db-analysis.
Стан: 🔴 проблема · 🟡 дрібниця (зайвий/невикористаний індекс) · 🟢 ок · ✅ виправлено й підтверджено. Один рядок = один знімок (дата в «Знято»). Після фіксу додаємо НОВИЙ рядок з пізнішою датою — щоб порівняти було/стало.
| Колекція | Знято | Docs | Idx | Idx, MB | Профайлер (COLLSCAN) | Стан | Фікс / зміна |
|---|---|---|---|---|---|---|---|
academy_answers | 18.06 | 102K | 1 | 2.2 | 461/461 ops COLLSCAN · examined ~101K → returned 38 · max 1162ms · FRAG 93% (965.8 MB reusable) | 🔴 | + { traineeId: 1, courseId: 1, lessonId: 1 } — один індекс на 3 гарячі shape-и ({courseId,traineeId} 332, {lessonId,traineeId} 47, {courseId,lessonId,traineeId} 82); traineeId перший бо є у всіх. FRAG ✅ 18.06: compact freed ~909 MiB (953 MB), reusable знято. ⏳ Індекс — деплой не зроблено (COLLSCAN ще не звірено) |
academy_lessons | 18.06 | 817 | 1 | 0.0 | 2/2 ops COLLSCAN по {courseId, isHidden} · examined 817 (весь, ~19MB жирних доків) → returned 45 · max 323ms | 🔴 | + { courseId: 1, isHidden: 1 } — домінівний shape find({courseId, isHidden}) (7 call-site-ів); isHidden другим → covered-read для .select(['id']). Читається часто / пишеться рідко → write-оверхед ~0. FRAG 49% (12MB) — дрібниця, compact не вартий. Деплой не зроблено |
academy_courses | 18.06 | 20 | 1 | 0.0 | 1 command COLLSCAN · examined 20 → returned 2 · 296ms | 🟢 | 20 доків — COLLSCAN тривіальний; 296ms = оверхед aggregate, не скан. Індекс не вартий. Дія не потрібна |
academy_modules | 18.06 | 149 | 1 | 0.0 | 1 command · examined 0 → returned 1 · 125ms | 🟢 | examined: 0 — навіть не скан. Дрібна колекція. Дія не потрібна |