Бэкэнд-часть приложения для изучения немецкого языка. Приложение построено по модульному принципу и состоит из нескольких составных частей.
Основной модуль приложения, на основе которого строятся все остальные составляющие. У каждого пользователя есть собственный словарь, в который он может добавлять слова. Каждое слово определяется следующими характеристиками:
- Перевод.
- Часть речи (из заданного в системе набора).
- Дополнительная информация по усмотрению пользователя.
Все характеристики являются необязательными. Для добавления слова в словарь достаточно ввести само слово.
Помимо добавления слов, пользователь также должен иметь возможность редактировать уже существующие слова в словаре и удалять их.
Слова можно добавлять по одному, через интерфейс веб-приложения, а также с помощью механизма импорта текстовых файлов, составленных по заданному формату.
В силу специфики немецкого языка: спряжения глаголов, склонения существительных и прилагательных, наличия рода и пр. - для некоторых частей речи выделены отдельные сущности, отражающие их грамматические особенности. Технически, слова хранятся однородно, а дополнительная информация, связанная с частью речи, хранится в отдельных таблицах. Благодаря этому появляется возможность постепенно расширять функционал словаря для разных частей речи, не затрагивая уже существующий функционал.
Пользователь может объединить слова из словаря в группы произвольным образом, например по тематике, чтобы использовать их в других модулях приложения.
Пользователь может учить слова с помощью методики флеш-карточек, переводя их с немецкого языка на русский и наоборот.
Перевод с немецкого языка на русский реализуется выбором варианта ответа.
Перевод с русского языка на немецкий реализуется дополнением слова, в котором не хватает нескольких букв, до правильного ответа.
Неавторизованные пользователи не имеют доступа к модулям приложения. Для получения доступа к возможностям сервиса пользователь должен авторизоваться.
Авторизация происходит посредством сервиса Auth0. Оттуда же подтягиваются первоначальные данные о пользователе (никнейм, имя, фамилия при наличии).
Пройдя регистрацию, пользователь может ввести дополнительные данные о себе, а также изменить никнейм.
Содержит основную информацию о модулях приложения: краткое описание и ссылки для создания коллекций слов в играх. Также содержит список недавно использованных пользователем коллекций слов в играх с возможностью быстрого перехода к ним.
- Гость (неавторизованный пользователь)
- Пользователь
- Администратор
- Создание учетной записи/авторизация (в зависимости от типа приложения)
- Авторизация
- Выход из аккаунта
- Редактирование аккаунта
- Добавление слов в личный словарь
- Удаление слов из личного словаря
- Создание, редактирование и удаление групп слов
- Начало любой игры с созданной группой слов
- Начало любой игры с группой слов, доступной по ссылке
- Все возможности пользователя
- Редактирование и удаление пользователей
- Редактирование и удаление любых наборов слов для игр
- Удаление любых слов
- id - serial, primary key
- auth0_sub - varchar(256), not null, unique
- username - varchar(32), not null
- first_name - varchar(32)
- last_name - varchar(32)
- is_admin - boolean, not null
- id - serial, primary key
- user_id - integer, foreign key to User, cascade delete
- word - varchar(256), not null
- translate - varchar(256)
- info - varchar(256)
- has_type - boolean, not null
gender: enum('m', 'f', 'n')
- id - serial, primary key
- word_id - integer, foreign key to Word, cascade delete
- plural - varchar(256)
- w_gender - gender, not null
- id - serial, primary key
- user_id - integer, foreign key to User, cascade delete
- g_name - varchar(256), not null
- is_shared - boolean, not null
- group_id - integer, foreign key to WordGroup, cascade delete
- word_id - integer, foreign key to Word, cascade delete
- Схема модели данных: /Easymacher.drawio.
- Инициализирующий скрипт SQL: /init.sql.
- ТЗ: /Spec.xml.
- При добавлении существительного данные в таблицы words_nouns и words_base добавляются в рамках транзакции. Если запись добавится в одну из двух таблиц, данные в итоге окажутся некорректными: при отсутствии записи в words_nouns теряем доп. информацию, при отсутствии записи в words_base - основную информацию о слове.
- Слова в группу добавляются в рамках транзакции. Если хотя бы одно слово не существует или уже есть в группе, все остальные слова также не добавляются в группу.