📊 Схема 1: Общая архитектура проекта
graph TB
subgraph Sources[Источники]
TG[Telegram-чат]
MANUAL[Ручной ввод]
end
subgraph Processing[Обработка]
NATIVE[telegram-webhook.php]
MTPROTO[mtproto-webhook.php]
PIPELINE[Единый PHP-пайплайн]
AI[OpenRouter]
end
subgraph Storage[Хранение]
DB[(MySQL)]
CACHE[Image Cache]
end
subgraph Frontend[Представление]
SITE[Сайт
index.php, news.php]
PODCAST[Подкаст-режим
podcast.php]
ADMIN[Админ-панель
manager/]
QUEUE[Очередь подкаста
podcast-queue.php]
KANBAN[Канбан-доска
docs/pages/tasks.php]
end
TG --> NATIVE
TG --> MTPROTO
MANUAL --> ADMIN
NATIVE --> PIPELINE
MTPROTO --> PIPELINE
PIPELINE --> DB
PIPELINE --> AI
AI --> PIPELINE
DB --> SITE
DB --> PODCAST
DB --> ADMIN
DB --> QUEUE
DB --> KANBAN
QUEUE --> PODCAST
CACHE --> SITE
CACHE --> PODCAST
🔄 Схема 2: Жизненный цикл новости
stateDiagram-v2
[*] --> raw: Импорт / создание
raw --> processing: PHP-пайплайн запускает обработку
processing --> enriched: OpenRouter завершил обогащение
enriched --> published: Модератор публикует
published --> podcast_queue: Добавление в очередь подкаста
podcast_queue --> aired: Выпуск вышел (статус published)
published --> updated: AI периодическое обновление
updated --> published: Обновлённая версия
published --> [*]: Удаление
raw --> [*]: Удаление
👥 Схема 3: Роли и их действия
🛡️ Модератор
- Просмотр enriched новостей
- Подтверждение и правка рубрик
- Установка importance
- Публикация → published
🎙️ Подкастер
- Добавление новостей в очередь подкаста
- Сортировка очереди (drag-and-drop)
- Управление статусами выпусков
- Удаление из очереди
- Формирование выпуска
✍️ Редактор
- Правка опубликованных новостей
- Управление рубриками
- Управление пользователями
🤖 AI-система
- Обогащение raw → enriched
- Заполнение description
- Предложение важности
- Предложение рубрик и тегов
- Логирование в ai_log
📚 Документатор
- Ведение канбан-доски задач
- Актуализация документации
- Формирование changelog
- Фиксация архитектурных решений
Модератор →
Подкастер →
Редактор ←
AI-система ←
Документатор
📦 Схема 4: Поток данных AI-обогащения
sequenceDiagram
participant PIPELINE as PHP-пайплайн
participant DB
participant AI as OpenRouter
PIPELINE->>DB: Получить новость со статусом raw
DB-->>PIPELINE: Исходный текст и настройки
loop Для каждого настроенного поля
PIPELINE->>AI: Прямой запрос на обогащение
AI-->>PIPELINE: Структурированный результат
PIPELINE->>DB: Сохранить результат и журнал обработки
end
📋 Схема 5: Работа с канбан-доской задач
sequenceDiagram
participant User as Пользователь
participant UI as tasks.php (UI)
participant JS as kanban.js
participant API as api/tasks.php
participant JSON as tasks.json
User->>UI: Открывает страницу задач
UI->>JS: Загружает скрипт
JS->>API: GET запрос
API->>JSON: Чтение файла
JSON-->>API: Данные задач
API-->>JS: JSON с задачами
JS-->>UI: Рендер канбан-доски
User->>UI: Двойной клик по задаче
UI->>JS: Открыть модальное окно
JS->>API: GET запрос (данные задачи)
API-->>JS: JSON задачи
JS-->>UI: Отобразить Markdown-описание
User->>UI: Редактирование + Сохранить
UI->>JS: Собрать данные
JS->>API: POST запрос (обновлённые задачи)
API->>JSON: Сохранить файл
JSON-->>API: Подтверждение
API-->>JS: success
JS-->>UI: Обновить доску
📁 Структура проекта
/
├── index.php # Лента новостей
├── news.php # Страница новости + рубрики
├── podcast.php # Подкаст-режим
├── sitemap.php # Sitemap.xml
├── config.php # Конфигурация
├── Database.php # PDO singleton
├── functions.php # Общие функции
├── image-manager.php # Кэширование изображений
├── comments.php # API комментариев
├── 404.php # Страница 404
├── /templates/ # Шаблоны страниц
├── /manager/ # Админ-панель
│ ├── podcast-queue.php # Управление очередью подкаста
│ └── ...
├── /api/ # Webhook-и и внутренние API сайта
├── /uploads/ # Загруженные файлы
├── /cache/ # Кэш изображений
└── /docs/ # Документация
├── data/
│ └── tasks.json # Хранилище задач
├── js/
│ └── kanban.js # Логика канбан-доски
├── api/
│ └── tasks.php # API для работы с задачами
└── pages/
└── tasks.php # Страница канбан-доски