Skip to content

skelantros/Easymacher

Repository files navigation

Краткое описание

Бэкэнд-часть приложения для изучения немецкого языка. Приложение построено по модульному принципу и состоит из нескольких составных частей.

Модули

Словарь

Основной модуль приложения, на основе которого строятся все остальные составляющие. У каждого пользователя есть собственный словарь, в который он может добавлять слова. Каждое слово определяется следующими характеристиками:

  • Перевод.
  • Часть речи (из заданного в системе набора).
  • Дополнительная информация по усмотрению пользователя.

Все характеристики являются необязательными. Для добавления слова в словарь достаточно ввести само слово.

Помимо добавления слов, пользователь также должен иметь возможность редактировать уже существующие слова в словаре и удалять их.

Слова можно добавлять по одному, через интерфейс веб-приложения, а также с помощью механизма импорта текстовых файлов, составленных по заданному формату.

В силу специфики немецкого языка: спряжения глаголов, склонения существительных и прилагательных, наличия рода и пр. - для некоторых частей речи выделены отдельные сущности, отражающие их грамматические особенности. Технически, слова хранятся однородно, а дополнительная информация, связанная с частью речи, хранится в отдельных таблицах. Благодаря этому появляется возможность постепенно расширять функционал словаря для разных частей речи, не затрагивая уже существующий функционал.

Группы слов

Пользователь может объединить слова из словаря в группы произвольным образом, например по тематике, чтобы использовать их в других модулях приложения.

Флеш-карточки

Пользователь может учить слова с помощью методики флеш-карточек, переводя их с немецкого языка на русский и наоборот.

Перевод с немецкого языка на русский реализуется выбором варианта ответа.

Перевод с русского языка на немецкий реализуется дополнением слова, в котором не хватает нескольких букв, до правильного ответа.

Авторизация и регистрация

Неавторизованные пользователи не имеют доступа к модулям приложения. Для получения доступа к возможностям сервиса пользователь должен авторизоваться.

Авторизация происходит посредством сервиса Auth0. Оттуда же подтягиваются первоначальные данные о пользователе (никнейм, имя, фамилия при наличии).

Профиль пользователя

Пройдя регистрацию, пользователь может ввести дополнительные данные о себе, а также изменить никнейм.

Главная страница

Содержит основную информацию о модулях приложения: краткое описание и ссылки для создания коллекций слов в играх. Также содержит список недавно использованных пользователем коллекций слов в играх с возможностью быстрого перехода к ним.

Уровни доступа

  • Гость (неавторизованный пользователь)
  • Пользователь
  • Администратор

Возможности гостя

  • Создание учетной записи/авторизация (в зависимости от типа приложения)

Возможности пользователя

  • Авторизация
  • Выход из аккаунта
  • Редактирование аккаунта
  • Добавление слов в личный словарь
  • Удаление слов из личного словаря
  • Создание, редактирование и удаление групп слов
  • Начало любой игры с созданной группой слов
  • Начало любой игры с группой слов, доступной по ссылке

Возможности администратора

  • Все возможности пользователя
  • Редактирование и удаление пользователей
  • Редактирование и удаление любых наборов слов для игр
  • Удаление любых слов

Модель данных

User

  • 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

Word

  • 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

Noun

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

WordGroup

  • id - serial, primary key
  • user_id - integer, foreign key to User, cascade delete
  • g_name - varchar(256), not null
  • is_shared - boolean, not null

GroupsToWords

  • 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 - основную информацию о слове.
  • Слова в группу добавляются в рамках транзакции. Если хотя бы одно слово не существует или уже есть в группе, все остальные слова также не добавляются в группу.

About

An application for learning German language (backend).

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published