Идея проекта – разработать телеграм бота, с помощью которого можно учить незнакомые термины на английском, которые пользователь решил добавить сам.
Терминология в контексте проекта:
термин – слово или которкая фраза
коллекция - набор терминов конкретного пользователя
задача - термин из коллекции, который нужно правильно перевести
Схема проста. Пользователь увидел незнакомый термин (например в онлайн игре), отправил в телеграм бота, добавил перевод, потом получает случайные задачи на повторение по заданному таймеру или по запросу.
- Код телеграм бота сделан на скорую руку, желательно переписать
- Можно переделать get запрос коллекции на grpc stream (пока оставил unary, чтобы успеть)
- Добавить нормальную авторизацию и регистрацию (не через basic authentication)
- Вернуть хэширование через bcrypt (сейчас sha512), для basic auth 1+ секунда на проверку хэша через bcrypt слишком критично, нужны сессии/токены/что-то ещё
- Распарсить grpc статусы из ошибок на клиенте (боте) и выводить более понятную информацию
- Как лучше прокидывать user id в эндпоинты, чтобы везде не чекать метадату с ошибками
План максимум
Требования приоритезированы по технике MoSCoW
- [M] Хочу добавлять термины на английском языке для последующего изучения
- [M] Хочу добавлять перевод вручную
- [M] Хочу получать список моих сохраненных терминов
- [M] Хочу получать задачу по запросу к системе
- [M] Хочу чтобы мой вариант перевода автоматически сверялся с сохраненным значением
- [S] Хочу получать задачу по подписке (например, раз в час)
- [S] Хочу удалять ненужные термины из коллекции
- [S] Хочу иметь определения термина на иностранном языке из стороннего API
- [C] Хочу чтобы термины автоматически переводились на мой родной язык
- [С] Хочу узнавать, если перевод не был найден и добавлять его вручную
- [C] Хочу подтверждать, что перевод соответствует ожидаемому
- [W] Хочу помечать термины изученными
- [W] Хочу чтобы неизученные термины появлялись в заданиях чаще
- [W] Хочу хранить статистику по правильности переводов слов, чтобы определять на каких словах ошибаюсь чаще всего
- [W] Хочу обновлять информацию по существующим терминам
MVP
Обязательная функциональность:
- Хочу сохранять термины на английском языке для последующего изучения
- Хочу добавлять перевод терминов вручную
- Хочу получать список моих сохраненных терминов (коллекцию)
- Хочу получать задачу по запросу к системе
- Хочу чтобы мой вариант перевода сверялся с сохраненным значением
Если успею:
- Хочу получать задачу по подписке (например, раз в час)
- Хочу удалять ненужные термины из коллекции
- Хочу иметь определения термина на английском языке из стороннего API
- Сервис должен предоставлять gRPC интерфейс
- Сервис должен предоставлять HTTP интерфейс как прокси к gRPC интерфейсу
- Интерфейс бота, используемый в мессенджере, должен быть продублирован через gRPC/HTTP ручки
- Код должен быть покрыт тестами, с использованием моков
- Сервис должен использовать миграции при работе с БД
- База данных должна быть PostgreSQL
- Взаимодействие с сервисом через интерфейс Telegram бота
- Сервис должен хранить конфигурацию в yaml файлах
- Сервис должен быть завёрнут в докер
- Дедлайн – 16 мая 2022
- Ограничение количества терминов на пользователя – 20
- Иностранный язык - английский, родной язык - русский
- MVP должно работать без вложения средств на сервер/API/итп