1. Проектирование архитектуры, настройка Git и базы данных Supabase
Проектирование архитектуры, настройка Git и базы данных Supabase
Добро пожаловать в курс по разработке образовательной AI-платформы (LMS). Мы создаем не просто сайт, а сложную экосистему с геймификацией, ролевой моделью (ученик, учитель, родитель, учреждение) и искусственным интеллектом. Чтобы проект получил высокую оценку и стал достойным кейсом в портфолио, мы начнем с фундамента: правильной архитектуры, профессиональной работы с Git и проектирования базы данных.
1. Архитектура системы: Модульный монолит
Для учебного проекта такого масштаба (LMS с элементами соцсети и турнирами) микросервисная архитектура может быть избыточной и сложной в развертывании. Мы выберем модульный монолит. Это позволит нам держать код в одном репозитории (удобно для показа преподавателю), но сохранять четкое разделение логики.
Согласно Степанов М.А. и др., современные образовательные системы требуют интеграции разнородных данных (цифровой след, успеваемость) и масштабируемости. Наша архитектура будет состоять из трех слоев:
Схема взаимодействия
Пользователь (Student/Teacher) React App Node.js API Supabase/Redis.
2. Профессиональная настройка Git
Для получения высокой оценки важно показать историю разработки. Мы будем использовать методологию Conventional Commits. Это стандарт оформления коммитов, который делает историю читаемой.
Инициализация репозитория
Откройте терминал в папке проекта:
Правила именования коммитов
Каждый ваш коммит должен начинаться с типа изменения. Это покажет преподавателю вашу дисциплину.
* feat: — новая функциональность (например, feat: add tournament logic)
* fix: — исправление бага (например, fix: user login error)
* docs: — изменения в документации
* style: — форматирование, отсутсвие изменений кода (пробелы, точки с запятой)
* refactor: — правка кода без изменения функциональности
> Использование понятной истории коммитов критически важно для командной разработки и оценки вклада каждого участника. > > NikoCerens
3. Проектирование базы данных в Supabase
Supabase предоставляет нам PostgreSQL «из коробки» с готовым API и аутентификацией. Это идеально подходит для быстрого старта сложного проекта. Как отмечают в статье про подключение Supabase, использование CLI и миграций позволяет автоматизировать развертывание схемы БД, что является признаком зрелого подхода к разработке (согласно @ansaril3).
ER-диаграмма (Схема данных)
Нам нужно реализовать 4 роли: Institution (Учреждение), Teacher (Учитель), Student (Ученик), Parent (Родитель). В Supabase таблица auth.users управляет входом, но данные профилей мы будем хранить в отдельной таблице public.profiles.
#### Основные таблицы:
id (uuid, PK) — ссылка на auth.users
* role (enum: 'admin', 'institution', 'teacher', 'student', 'parent')
* full_name (text)
* avatar_url (text)
* institution_id (uuid, FK) — принадлежность к школе/вузуid (uuid, PK)
* name (text)
* type (enum: 'school', 'college', 'university')
* subscription_plan (enum: 'basic', 'pro', 'max')id (uuid, PK)
* title (text)
* author_id (uuid, FK) — учитель или учреждение
* is_public (boolean) — для глобального поиска
* price (numeric) — если курс платныйstudent_id (uuid, FK)
* course_id (uuid, FK)
* progress_percent (int)
* completed_at (timestamp)user_id (uuid, FK)
* xp (int) — опыт
* level (int) — уровень
* coins (int) — внутренняя валютаМатематика геймификации
Чтобы система уровней была сбалансированной, мы не можем использовать линейный рост. Нам нужна формула, где каждый следующий уровень требует больше опыта. Используем квадратичную зависимость.
Формула расчета необходимого опыта () для достижения уровня ():
где — необходимое количество очков опыта для достижения уровня, — коэффициент сложности (например, 100), — номер уровня.
При : * Уровень 1: XP * Уровень 2: XP * Уровень 10: XP
Для расчета текущего уровня игрока на основе его опыта используем обратную формулу:
где — текущий уровень (округленный вниз), — текущий опыт игрока, — коэффициент сложности.
SQL для создания таблиц (Supabase SQL Editor)
Вставьте этот код в SQL Editor в панели Supabase:
4. Настройка Redis для турниров
Redis нам нужен для двух критических функций, которые сложно реализовать быстро на чистом SQL:
В Node.js мы будем использовать структуру Sorted Set в Redis для хранения очков турнира. Это работает быстрее, чем SELECT * FROM users ORDER BY xp DESC в PostgreSQL при больших нагрузках.
5. Инициализация проекта (Node.js + React)
Создадим структуру папок, которая впечатлит любого проверяющего своей организованностью.
В итоге ваша структура должна выглядеть так:
Итоги
В этой статье мы заложили фундамент нашей LMS-платформы: