Skip to content

Commit a97094c

Browse files
authored
Merge pull request #5 from Delphington/backend_4
Backend 4
2 parents 16752ae + 028adc0 commit a97094c

1 file changed

Lines changed: 22 additions & 35 deletions

File tree

README.md

Lines changed: 22 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515

1616
----
1717

18-
19-
2018
## 📝 Описание проекта
2119

2220
Приложение для отслеживания обновлений контента по ссылкам.
@@ -30,13 +28,7 @@
3028

3129
Для работы требуется БД `PostgreSQL`, `Redis`, `Kafka`.
3230

33-
Для дополнительной справки: [HELP.md](./HELP.md)
34-
35-
36-
37-
![{E4ED68AF-CD94-4964-B402-74AE70A10960}](https://github.com/user-attachments/assets/26e0773b-61db-41fb-b696-01e68d824b3a)
38-
39-
31+
### 📟 Схема приложения
4032
![Scrapper](https://github.com/user-attachments/assets/0a9cfa67-9f31-456f-a24d-24fbec93654e)<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 7200.790836764663 2795.6894500653675" width="7200.790836764663" height="2795.6894500653675" class="excalidraw-svg">
4133
<!-- svg-source:excalidraw -->
4234

@@ -69,28 +61,25 @@
6961
- [**`TagClient`**](https://github.com/Delphington/LinterBot/blob/main/bot/src/main/java/backend/academy/bot/client/tag/ScrapperTagClientImpl.java) — получение списка тегов, получение ссылки по тегу и удаление тега у ссылки.
7062
- [**`ScrapperFilterClient`**](https://github.com/Delphington/LinterBot/blob/main/bot/src/main/java/backend/academy/bot/client/filter/ScrapperFilterClientImpl.java) — управление фильтрами (добавление, удаление, получение списка фильтров)
7163

72-
Scrapper API работает по OpenAPI-контракту. В случае ошибок ошибки логируются, корректную обработку ошибок и пересылку сообщений в чат выполняет [`ErrorHandler`]().
73-
7464
### 📩 Получение обновлений
7565

76-
- Бот получает обновления о ссылках через [`UpdateController`]() по HTTP либо через [`KafkaUpdateListener`]() по Kafka.
66+
- Бот получает обновления о ссылках через [`UpdateController`](https://github.com/Delphington/LinterBot/blob/main/bot/src/main/java/backend/academy/bot/api/controller/UpdateController.java) по HTTP либо через [`KafkaUpdateListener`](https://github.com/Delphington/LinterBot/blob/main/bot/src/main/java/backend/academy/bot/kafka/client/KafkaLinkUpdateListener.java) по Kafka.
7767
- Scrapper отправляет данные по OpenAPI-контракту.
78-
- Обновления рассылаются чатам через [`UpdateService`]().
68+
- Обновления рассылаются чатам через [`NotificationService`](https://github.com/Delphington/LinterBot/blob/main/bot/src/main/java/backend/academy/bot/notification/NotificationService.java).
7969

8070
### 📜 Дополнительно
8171

82-
- Бот поддерживает встроенное [**меню команд**]() в Telegram.
72+
- Бот поддерживает встроенное [**меню команд**](https://github.com/Delphington/LinterBot/blob/main/bot/src/main/java/backend/academy/bot/processor/UserMessageProcessor.java) в Telegram.
8373

84-
### 🧠 Кеширование
74+
### 🧠 Кеширование Redis
8575

8676
Бот кеширует ответы для следующих команд:
8777
- /tag
8878
- /tag <tag>
8979
- /list
9080

9181
🔄 Кеш автоматически сбрасывается в следующих случаях:
92-
- При добавлении или удалении ссылки (/track, /untrack)
93-
- При удалении чата (/stop)
82+
- При добавлении или удалении ссылки (/track, /untrack, /untag)
9483

9584
При вызове команд бот сначала проверяет наличие ответа в кеше. Если данные найдены — используется кеш. В противном случае происходит обращение к Scrapper API, и результат сохраняется в кеш.
9685

@@ -101,21 +90,22 @@ Scrapper API работает по OpenAPI-контракту. В случае
10190
### 📌 Функционал
10291

10392
Scrapper обрабатывает запросы от бота:
104-
- **Работа с чатами** через [`ChatController`]().
105-
- **Работа с ссылками** через [`LinkController`]().
106-
- **Работа с тегами** через [`TagController`]().
93+
- **Работа с чатами** через [`ChatController`](https://github.com/Delphington/LinterBot/blob/main/scrapper/src/main/java/backend/academy/scrapper/controller/ChatController.java).
94+
- **Работа с ссылками** через [`LinkController`](https://github.com/Delphington/LinterBot/blob/main/scrapper/src/main/java/backend/academy/scrapper/controller/LinkController.java).
95+
- **Работа с тегами** через [`TagController`](https://github.com/Delphington/LinterBot/blob/main/scrapper/src/main/java/backend/academy/scrapper/controller/TagController.java).
96+
- **Работа с фильтрами** через [`FilterController`](https://github.com/Delphington/LinterBot/blob/main/scrapper/src/main/java/backend/academy/scrapper/controller/FilterController.java).
10797

10898
Все контроллеры работают по OpenAPI-контракту.
10999

110100
### 🔄 Получение обновлений
111101

112-
- [**`UpdateScheduler`**]().
102+
- [**`LinkUpdateScheduler`**](https://github.com/Delphington/LinterBot/blob/main/scrapper/src/main/java/backend/academy/scrapper/scheduler/LinkUpdaterScheduler.java).
113103
- **📡 Источники данных:**
114-
- GitHub — через [`GitHubClient`]()
115-
- Stack Overflow — через [`StackOverflowClient`]()
104+
- GitHub — через [`GitHubClient`](https://github.com/Delphington/LinterBot/blob/main/scrapper/src/main/java/backend/academy/scrapper/tracker/client/GitHubClient.java)
105+
- Stack Overflow — через [`StackOverflowClient`](https://github.com/Delphington/LinterBot/blob/main/scrapper/src/main/java/backend/academy/scrapper/tracker/client/StackOverFlowClient.java)
116106
- **⚙️ Обработка полученных данных**
117107
1. Запрос обновлений
118-
- Для каждого URL запрашивается обновление через API
108+
- Для каждого URL запрашивается обновление через открытый API GitHub и StackOverflow
119109
2. Фильтрация обновлений
120110
- Определяются подписанные пользователи (чаты), которые отслеживают данный URL.
121111
- Для каждого пользователя применяется его список фильтров:
@@ -134,29 +124,26 @@ Scrapper обрабатывает запросы от бота:
134124

135125
Для хранения данных используются **четыре основные таблицы** и **три вспомогательные таблицы** для связи.
136126

127+
128+
### 📌 Схема базы данных
129+
130+
![{E4ED68AF-CD94-4964-B402-74AE70A10960}](https://github.com/user-attachments/assets/26e0773b-61db-41fb-b696-01e68d824b3a)
131+
137132
### 📌 Основные таблицы
138133

139-
- `chats` — таблица чатов.
134+
- `tg_chats` — таблица чатов.
140135
- `links` — таблица ссылок.
141136
- `tags` — таблица тегов.
142137
- `filters` — таблица фильтров.
143-
144-
### 🔗 Связующие таблицы
145-
146-
Связи между чатами, ссылками, тегами и фильтрами реализованы через **промежуточные таблицы**:
147-
148-
- `chat_links` — связь между чатами и ссылками.
149-
- `chat_link_tags` — связь между ссылками и тегами в контексте чата.
150-
- `chat_link_filters` — связь между ссылками и фильтрами в контексте чата.
138+
- `filter_list` — таблица фильтров каждого пользователя
151139

152140
💡 **Один чат может отслеживать несколько ссылок, а одна ссылка может быть отслеживаемой несколькими чатами.**
153141
📌 **Каждая ссылка может иметь несколько тегов и фильтров в рамках одного чата.**
154142

155143
### 🛠 Способы работы с базой данных:
156144

157-
- **SQL** (`JdbcTemplate`, `SqlRepository`).
145+
- **SQL** (`JdbcTemplate`, `Dao`).
158146
- **ORM** (`Hibernate`, `OrmRepository`).
159-
Оба репозитория (`SqlRepository` и `OrmRepository`) наследуются от `DbRepository` и работают одинаково.
160147
Выбор зависит от **настроек** (`database.access-type`).
161148

162149
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

0 commit comments

Comments
 (0)