Телеграм бот. Нотатки. Стаді плани. Архітектура. Вебсокети. Част. 3

Вступ

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

Ідея

Цей телеграм-бот створений для агрегації, структурування та аналізу даних. Він дозволяє користувачам створювати та організовувати нотатки у вигляді тематичних "релмів" і отримувати аналітику щодо їхнього користування. Крім того, користувачі можуть створювати навчальні плани, розподіляючи час і теми для вивчення, і отримувати звіти про свій прогрес.

Архітектура

  • Notes CRUD

Через Telegram користувач може створювати, видаляти та переглядати створені нотатки. Щоб відредагувати якусь, він вибирає нотатку і йому генерується унікальна лінка на сторінку, де він може переглянути нотатку повністю та за потреби її відредагувати.

  • Web / WebSocket

При відкритті цієї сторінки, встановлюється WebSocket з’єднанням сервером, щоб будь-які зміни тексту були надіслані та збережені у Redis.

Після закриття WebSocket сесії, всі зміни по нотатці будуть збережені в основну базу до сутності.

Для чого Redis? Для відмовостійкості, розподіленості та для зменшення навантаження на основну БД — PostgreSQL (у випадку достатньої активності з боку юзерів, на початку звісно в цьому немає великої потреби. Це так, чисто щоб спробувати якісь дизайн-рішення)

  • PostgreSQL

Телеграм-користувачі, нотатки, інша інформація.

Трохи коду

Яким чином при відкритті вебсокет сесії ми розуміємо що це за юзер та нотатка?

  • MVC Controller

@GetMapping("/note/{uniqueNoteId}/edit")
public ModelAndView editNote(@PathVariable String uniqueNoteId, ModelAndView modelAndView) {
    Note note = noteRepository.getNoteByUniqueLinkId(uniqueNoteId).orElseThrow();
    modelAndView.addObject("note", note);
    modelAndView.setViewName("editNote");
    return modelAndView;
}

За допомогою Thymeleaf, ми повертаємо шаблон з нашим об’єктом Note.
Коли юзер дістає нотатку по ID, генерується URL посилання виду:

http://example.com/note/sdgf4yhrt/edit
  • editNote.html

let userId = /*[[${note.userId}]]*/ 'defaultId';
sock = new SockJS('/init?userId=' + encodeURIComponent(userId));

Я встановлюю WebSocket сесію по відповідному ендпоінту передаючи userId з отриманого об’єкта Note.

  • Зміни тексту нотатки

При будь-яких змінах, надсилаються дані про нотатку. Де ми це все обробляємо і зберігаємо у Redis.

document.getElementById('noteTextArea').addEventListener('input', function(event) {
    const message = {
        qualifier: 'UpdateNote',
        noteId: /*[[${note.id}]]*/ 'defaultNoteId',
        userIdentifier: /*[[${note.userId}]]*/ 'defaultUserId',
        correlationId: generateUUID(),
        noteText: event.target.value,
    };
    sendMessage(message);
});

Що далі?

Далі, розробка по визначеній роадмапі та покращення функціоналу і процесу CI/CD. У наступній частині я б хотів розкрити — встановлення Kubernetes і якісь мінімальні речі з оркестрацією наших контейнерів.

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Oleksandr Klymenko
Oleksandr Klymenko@overpathz

Java Software Engineer

4.6KПрочитань
1Автори
71Читачі
На Друкарні з 19 квітня

Більше від автора

  • Secure networking. Deep Dive

    Глибоке занурення в протоколи TLS/SSL та інфраструктуру відкритих ключів (PKI). Основні поняття, процес встановлення захищеного з'єднання, роль сертифікатів та ланцюжка довіри

    Теми цього довгочиту:

    Security
  • Поширені помилки у дизайні REST API

    У довгочиті розглядаються поширені помилки при проектуванні REST API та способи їх уникнення: версіонування, використання DTO, підхід CQRS, робота з мікросервісами, та інші практики для підвищення продуктивності, безпеки й зручності API

    Теми цього довгочиту:

    Java
  • Java. Короткий огляд еволюції багатопотоковості

    У перших версіях Java багатопоточність реалізовувалася за допомогою класу Thread, який дозволяв створювати нові потоки. Проте ця модель мала багато недоліків:

    Теми цього довгочиту:

    Java

Вам також сподобається

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Вам також сподобається