198 lines
9.3 KiB
Markdown
198 lines
9.3 KiB
Markdown
# Архитектура новостного интерфейса
|
||
|
||
## Схема компонентов
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ Vue.js Frontend │
|
||
├─────────────────────────────────────────────────────────────────┤
|
||
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
||
│ │ NewsList │ │ NewsDashboard │ │ NewsAdmin │ │
|
||
│ │ (Лента) │ │ (Статистика) │ │ (Управление) │ │
|
||
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
|
||
│ │ │ │ │
|
||
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
||
│ │ NewsFilters │ │ NewsDetail │ │ NewsService │ │
|
||
│ │ (Фильтры) │ │ (Детали) │ │ (API слой) │ │
|
||
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ News Parser API │
|
||
├─────────────────────────────────────────────────────────────────┤
|
||
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
||
│ │ GET /items │ │ GET /stats │ │ GET /health │ │
|
||
│ │ (Новости) │ │ (Статистика) │ │ (Статус) │ │
|
||
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
|
||
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
||
│ │ POST /parse/all │ │POST /parse/{id} │ │GET /health/mongo│ │
|
||
│ │ (Парсинг всех) │ │ (Парсинг по ID) │ │ (Статус БД) │ │
|
||
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ MongoDB Database │
|
||
├─────────────────────────────────────────────────────────────────┤
|
||
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
||
│ │ News Items │ │ Statistics │ │ Health Logs │ │
|
||
│ │ (Новости) │ │ (Статистика) │ │ (Логи) │ │
|
||
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## Поток данных
|
||
|
||
### 1. Загрузка новостей
|
||
|
||
```
|
||
User → NewsList → NewsService → API → MongoDB
|
||
← NewsFilters ←
|
||
```
|
||
|
||
### 2. Фильтрация
|
||
|
||
```
|
||
User → NewsFilters → NewsList → NewsService → API (с параметрами)
|
||
```
|
||
|
||
### 3. Статистика
|
||
|
||
```
|
||
User → NewsDashboard → NewsService → API → MongoDB
|
||
```
|
||
|
||
### 4. Управление парсером
|
||
|
||
```
|
||
User → NewsAdmin → NewsService → API → Parser Service → MongoDB
|
||
```
|
||
|
||
## Структура данных
|
||
|
||
### NewsItem
|
||
|
||
```javascript
|
||
{
|
||
id: string,
|
||
sourceName: string,
|
||
title: string,
|
||
url: string,
|
||
publishedAt: string,
|
||
addedAt: string,
|
||
rawText: string,
|
||
hash: string,
|
||
category: string,
|
||
analytics: {
|
||
summary: string,
|
||
sentiment: string,
|
||
tags: string[],
|
||
entities: object
|
||
}
|
||
}
|
||
```
|
||
|
||
### API Response
|
||
|
||
```javascript
|
||
{
|
||
success: boolean,
|
||
message: string,
|
||
data: {
|
||
content: NewsItem[],
|
||
pageable: object,
|
||
totalElements: number,
|
||
totalPages: number,
|
||
last: boolean,
|
||
first: boolean,
|
||
numberOfElements: number
|
||
}
|
||
}
|
||
```
|
||
|
||
## Технологический стек
|
||
|
||
### Frontend
|
||
|
||
- **Vue 3** - основной фреймворк
|
||
- **PrimeVue** - UI компоненты
|
||
- **Tailwind CSS** - стилизация
|
||
- **Chart.js** - графики и диаграммы
|
||
- **Vue Router** - маршрутизация
|
||
|
||
### Backend API
|
||
|
||
- **REST API** - HTTP эндпоинты
|
||
- **JSON** - формат данных
|
||
- **MongoDB** - база данных
|
||
|
||
### Инструменты разработки
|
||
|
||
- **Vite** - сборщик
|
||
- **ESLint** - линтер
|
||
- **Prettier** - форматирование
|
||
|
||
## Принципы архитектуры
|
||
|
||
### 1. Разделение ответственности
|
||
|
||
- **Компоненты** - только UI логика
|
||
- **Сервисы** - работа с API
|
||
- **Конфигурация** - настройки
|
||
|
||
### 2. Переиспользование
|
||
|
||
- **NewsService** - единая точка доступа к API
|
||
- **NewsFilters** - переиспользуемый компонент
|
||
- **Конфигурация** - централизованные настройки
|
||
|
||
### 3. Производительность
|
||
|
||
- **Ленивая загрузка** - компоненты загружаются по требованию
|
||
- **Кэширование** - данные статистики кэшируются
|
||
- **Оптимизация** - минимальные API запросы
|
||
|
||
### 4. Масштабируемость
|
||
|
||
- **Модульная структура** - легко добавлять новые функции
|
||
- **Конфигурируемость** - настройки через переменные окружения
|
||
- **Расширяемость** - простое добавление новых источников
|
||
|
||
## Безопасность
|
||
|
||
### 1. Валидация данных
|
||
|
||
- **Проверка ответов API** - всегда проверяется поле `success`
|
||
- **Обработка ошибок** - graceful degradation
|
||
- **Санитизация** - очистка пользовательского ввода
|
||
|
||
### 2. Аутентификация
|
||
|
||
- **Требуется авторизация** - все маршруты защищены
|
||
- **Роли пользователей** - админ функции только для админов
|
||
|
||
### 3. CORS
|
||
|
||
- **Настройка CORS** - на уровне API сервера
|
||
- **Безопасные запросы** - только к настроенному API
|
||
|
||
## Мониторинг и отладка
|
||
|
||
### 1. Логирование
|
||
|
||
- **Консольные логи** - для разработки
|
||
- **Обработка ошибок** - централизованная система
|
||
|
||
### 2. Метрики
|
||
|
||
- **Статистика загрузки** - количество запросов
|
||
- **Время отклика** - производительность API
|
||
- **Статус системы** - мониторинг здоровья
|
||
|
||
### 3. Отладка
|
||
|
||
- **DevTools** - инструменты разработчика
|
||
- **Network tab** - мониторинг запросов
|
||
- **Console** - логи и ошибки
|