# Структура навчальної програми

Наш основний навчальний вміст знаходиться у каталозі під назвою `curriculum`. На цій сторінці буде детально описано, як ці файли організовані.

## Термінологія

При обговоренні навчальної програми важливо знати декілька термінів.

- `certification` : коли йдеться про сертифікацію, мається на увазі сертифікати, які отримують користувачі. Це не те саме, що й superBlock.
- `superBlock` : збірка найскладніших завдань. Кожен суперблок відповідає сертифікації в навчальній програмі (наприклад, «Адаптивний вебдизайн»).
- `block` : розділ у межах суперблоку. Блок відповідає групі завдань у даній сертифікації (наприклад, «Основи HTML та HTML5»)
- `challenge` : це окремий урок у навчальній програмі (наприклад, «Ознайомлення з елементами HTML»)

## Дерево файлів

Ось як буде виглядати структура файлів з цими термінами:

<!-- prettier-ignore -->
```md

curriculum/
├─ _meta/
│  ├─ {block}/
│  │  ├─ meta.json
├─ {language}/
│  ├─ {superBlock}/
│  │  ├─ {block}/
│  │  │  ├─ {challenge}.md
```

## Каталог `_meta`

Каталог `_meta` — це особливий каталог, який містить файли `.json`. Ці файли відповідають кожному окремому блоку в навчальній програмі та використовуються, щоб визначити до якого суперблоку належить блок та порядок завдань у цьому блоці.

## Перейменування файлів

Інколи вам потрібно перейменувати сертифікат, суперблок, блок чи завдання. У цьому розділі будуть описані важливі кроки, які допоможуть вам уникнути помилок збірки.

> [!ATTENTION] Перейменування файлів у структурі навчальної програми часто змінює шлях (або URL-адресу) вмісту на головній вебсторінці. Робити це варто з обережністю, оскільки перенаправлення потрібно налаштовувати для кожної внесеної зміни.

### Перейменування сертифікації

Під час перейменування сертифікації вам, ймовірно, доведеться перейменувати пов’язаний суперблок. Виконайте наступні дії, щоб перейменувати лише сертифікацію:

1. Оберіть нову назву для папки `curriculum/challenges/_meta/{superBlock}-certificate`.
1. У файлі `meta.json` тієї папки змініть значення у `name`, `dashedName` та `challengeOrder` на нову назву сертифікації.
1. Перейменуйте папку `{superBlock}-certificate` та файл YAML у `curriculum/challenges/english/12-certificate`.
1. Змініть `title` у файлі YAML на нову назву.
1. Перейменуйте файл та папку з третього кроку для решти мов навчальної програми.
1. Оновіть `client/src/redux/index.ts` для роботи з правильним `title`.
1. За бажанням оновіть і `certSlug` для суперблока у цьому ж файлі. **Зауважте**, що перейменування  `certSlug` змінить URL-адресу для сертифікацій, тому це варто робити обережно.
1. Оновіть `title` у `client/src/resources/cert-and-project-map.ts` на нові значення. **Зверніть увагу**, що ця зміна `title` **зруйнує** сторінку superBlock для відповідної сертифікації. Це пов’язано із тим, що назва суперблоку повинна відповідати назві сертифікації. Бажано одночасно змінити й назву суперблоку.
1. Якщо ви перейменували `certSlug` у сьомому кроці, змініть його для сертифікації та усіх вкладених значень `projects`.
1. Оновіть значення `certTypeTitleMap` у `config/certification-settings.js` на нову назву.
1. Якщо ви перейменували `certSlug` у сьомому кроці, оновіть ключ `certSlugTypeMap` у цьому ж файлі.
1. В разі потреби оновіть назву сертифікації у масиві `legacyCerts` у `client/src/client-only-routes/show-project-links.tsx`.
1. Змініть основний файл `README.md` на нову назву.

### Перейменування суперблоку

> [!NOTE] Під час перейменування суперблоку нова назва папки використовується як шлях і її варто вважати «правильною» назвою. Усі інші значення потрібно оновити, щоб показати цю зміну.

Коли ви перейменовуєте суперблок, потрібно перейменувати сертифікацію та блок `{superBlock}-projects`, оскільки вони мають спільну назву. Виконайте наступні кроки, щоб перейменувати лише суперблок:

1. Перейменуйте папку superBlock у каталозі `curriculum/challenges/english`.
1. Перейменуйте папку superBlock у _всіх_ інших каталогах `curriculum/challenges/{language}`.
1. Для кожного блоку у цьому суперблоці оновіть значення `superBlock` у файлі `meta.json` на його dashedName. Наразі вам не потрібно перейменовувати папки. Зробіть це при перейменуванні блоку.
1. Перейменуйте папку superblock у `client/src/pages/learn`.
1. Оновіть файл `index.md` у вищевказаній папці, змінивши значення `title` та `superBlock` на нову назву.
1. Для кожної вищезазначеної папки у блоці оновіть `index.md` для роботи з правильним значенням `superBlock`.
1. Оновіть шлях сертифікації зверху файлу `client/src/resources/cert-and-project-map.ts`, а також оновіть значення `title` цього суперблоку. **Зверніть увагу**, що змінивши `title` **зникне** можливість переглядати сертифікацію цього суперблоку. Це пов’язано з тим, що назва суперблоку повинна відповідати назві сертифікації. Бажано одночасно змінити й назву сертифікації.
1. Оновіть ключ `superBlockCertTypeMap` у `config/certification-settings.js` на нову назву суперблоку.
1. Оновіть значення шляху в `client/src/assets/icons/index.tsx`.
1. Оновіть файл `intro.json` для кожної мови в `client/i18n/locales` для роботи з новим суперблоком `dashedName`. В англійському файлі також оновіть `title`.
1. Перевірте файл `config/i18n/all-langs.js`, щоб дізнатись чи суперблок активний у збірках i18n. Оновіть усі значення, де він використовується.
1. Оновіть назву головного файлу `README.md`.

### Перейменування блоку

Для перейменування блоку навчальної програми виконайте наступне:

1. Змініть назву папки блоку в каталозі `curriculum/challenges/english/{superBlock}`.
1. Змініть назву тієї самої папки блоку в _усіх_ іншомовних каталогах, щоб вони збігалися. Вони повинні збігатися з англійською структурою, інакше виникне помилка збірки.
1. Змініть назву папки блоку в каталозі `_meta`.
1. Оновіть властивості `name` та `dashedName` для файлу `meta.json` цього блоку.
1. Оновіть папку блоку в `client/src/pages/learn/{superBlock}`.
1. Оновіть значення `block` у передмові файлу `index.md` папки вище.
1. Оновіть назву блоку на нову назву для всіх мов у файлах `client/i18n/locales/{language}/intro.json`. Також оновіть `title` в англійському файлі `intro.json`.
1. Оновіть основний файл `README.md` на нову назву.

### Перейменування завдання

Для перейменування окремого файлу завдання виконайте наступне:

1. Змініть назву файлу завдання в каталозі `curriculum/challenges/english`.
1. Змініть назву `title` та `dashedName` у цьому файлі.
1. Змініть назву файлу та `dashedName` у цих файлах для _всіх_ каталогів мов так, щоб вони збігалися.
1. Оновіть назву завдання у відповідному файлі `meta.json`. Ці назви завдань не використовуються у збірці, але забезпечують зручний спосіб ідентифікації порядку завдань.
1. Якщо завданням є сертифікаційний проєкт, оновіть файл YAML у `curriculum/english/12-certificates/<superBlock>` на нову назву.
1. Якщо завданням є сертифікаційний проєкт, оновіть `title` та `link` у `client/src/resources/cert-and-project-map.ts`
1. Якщо завданням є сертифікаційний проєкт, оновіть основний файл `README.md` на нову назву.

## Властивість `dashedName`

Властивість `dashedName` використовується для створення шляху URL-адреси для суперблока, блока або завдання. Загалом вони повинні відповідати тому, що помічник `/utils/slugs.js` виведе для імені файлу.
