Пет-проєкт для портфоліо джуніора. Реалізація

Розглянемо реалізацію квіз-чатбота на прикладі Java.

Більшість вакансій з Java вимагають знання Spring/Hibernate. Цей фреймворк вже давно домінує на ринку, і якщо ви його вивчите, то потім легко зможете перейти на інший, оскільки концепції скрізь однакові.

Припустимо, що ви вже вмієте писати "хелловорлд" на Java і знаєте всі базові конструкції мови. Як почати робити чатбот?

  1. Знайти існуючих ботів, подивитися, як вони працюють, щоб мати уявлення про кінцевий результат.
  2. Прочитати туторіал по Spring Boot, згенерувати тестовий проєкт з допомогою Initializr. Створити один POST ендпоінт, який буде друкувати запит у лог та відправляти відповідь {"status": "ok"}. Навчитися запускати та дебажити це локально за допомогою IntelliJ.
  3. Згенерувати бота через BotFather. Встановити ngrok, налаштувати тунель. Під'єднати бібліотеку для роботи з телеграмом або вручну, використовуючи RestTemplate зареєструвати вебхук. Можна робити long-poll для отримання подій, але вебхук мені більше подобається.
  4. Почати отримувати запити від телеграму до себе на локалхост.
  5. Реалізувати "ехо-бота" — він відповідає те саме, що йому надіслали. Для цього уже потрібно вивчити API ботів. Важливо! Потрібно прочитати про змінні середовища. Ключ від вашого бота не можна комітити в репозиторій, оскільки зловмисник може його вкрасти.
  6. Навчитися відправляти клавіатури. Реєструвати успішну або неуспішну відповідь.
  7. Знайти набір запитань. Захардкодити їх безпосередньо в програму. Написати логіку, яка буде зберігати «сесію» користувача у пам'яті та рахувати його бали.
  8. У нас є бот, який майже готовий до продакшену!
  9. Робимо акаунт на Heroku, читаємо туторіал "How To Deploy Spring Boot Application to Heroku"
  10. Коли вдалося задеплоїти вручну, читаємо "How To Deploy To Heroku GitHub Actions". Пишемо ямлі. Ви вже знаєте про E2E розробку більше, аніж більшість сеньйорів та мідлів! З цього моменту показуєте свого бота інтерв'юєерам.
  11. Коли вдалося задеплоїти автоматично, потрібно, щоб бот реєстрував свій вебхук при запуску сервера. Це хороший момент, щоб створити ще одного бота для тестування з локалхосту.
  12. Чудово! Але після перезавантаження серверу або редеплою бот буде втрачати дані користувачів. Потрібно мати persistent storage. Беремо постгрес на хероку, читаємо туторіали по JPA та зберігаємо все туди.
  13. Створювати таблиці вручну напряжно, потрібно почитати про міграції баз даних та вибрати відповідний інструмент. Всі питання у нас захардкожені — потрібно перенести їх у базу даних.

Можна продовжувати: додати підтримку інших месенджерів, додати абстракції для графа діалогу, зробити додаток повністю 12-факторним, налаштувати моніторинг, централізоване логування. Додати Docker Compose, зробити дашборд на Grafana з графіком активності користувачів, створити сайт з топом рейтингу, зробити на сайті авторизацію через Telegram, прикрутити scheduled jobs для щоденної відправки користувачам пушу з новинами, зробити адмінку або бота для додавання та редагування питань.

За бажанням, за складністю цей проект може зрівнятися з тим, що ви будете робити на своїй "справжній" роботі.

Алгоритм підходить для будь-якої мови програмування (PHP, C#, JS, Ruby). Якщо ви фронтендер, то замість бота можете зробити сайт, а дані зберігати в Firebase або FaunaDB. Мобільні розробники можуть зробити додаток і також зберігати дані там же.

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

Джуна, який зробив би такий проєкт, я б узяв.


Сподобалось? Долучайтеся до мого телеграм каналу: https://t.me/full_of_hatred