← К списку версий
v0.17.0
01.08.2026
MINOR
Управление проектом, Total Commander, API и синхронизация
Редактирование проекта в табах (Задание 55)
- Страница редактирования переведена на вкладки (tabs) на всю ширину экрана вместо длинного списка на 640px: «Основное», «Клиенты и доступ», «Сайты проекта», «Total Commander / ИИ», «Данные». Поля распределены по категориям — открыл проект, сразу видишь, что часто редактируешь, а статичные данные (пользователи) спрятаны во вкладку, чтобы случайно не менять.
- Основное открывается по умолчанию: название, статус и большое поле описания на всю ширину (220px высоты, resize) — удобно дописывать описание и добавлять логотип компании.
- Вкладка «Данные»: External ID, источник, даты создания/обновления/последней синхронизации (только чтение) и переключатель «Проект активен».
Total Commander / ИИ (поле «искусственный интеллект»)
- Новое поле `tc_path` (строка) в таблице `projects` — путь к папке проекта в Total Commander (первоисточник правды). Пример для Mysteria: `L:\Система\02 Клиенты\03 Активная работа\Mysteria\`.
- Новое поле `meta` (JSON) с флагом `meta.ai_ready` — «Доступен ИИ-агентам (есть первоисточник)». Если включён, по проекту можно давать задания ИИ-агентам: они сканируют папку Total Commander и обновляют данные.
- Новое поле `last_synced_at` (дата) — время последней синхронизации проекта; теперь проставляется автоматически при каждой синхронизации из папки.
- Проект **Mysteria (ID 34):** заполнен `tc_path` = `L:\Система\02 Клиенты\03 Активная работа\Mysteria\`, `ai_ready = true`.
- Страница проекта: блок «Total Commander / источник правды» с путём, индикатором «README.md найден/не найден» (+ дата изменения файла), бейджем «Доступен ИИ-агентам» и датой синхронизации.
Синхронизация из папки Total Commander (первоисточник правды)
- Новый сервис синхронизации: читает `README.md` из папки, указанной в `tc_path`, и обновляет поля проекта: название (первая часть заголовка `#`), описание (цитата-блок под заголовком, кроме метаданных `**Ключ:**`), статус (строка `**Статус проекта:**`, маппинг эмодзи/слов), сайты (ссылки из таблиц README — пропускаются соцсети и нерабочие 🔴).
- Кнопка «Синхронизировать сейчас» на странице проекта — мгновенная синхронизация одного проекта.
- Artisan-команда `php artisan project:sync` синхронизация всех проектов с указанным `tc_path` (вывод: что обновлено); `--id=34` — только один проект.
- Идемпотентность: повторная синхронизация без изменений в README не трогает данные (только обновляет `last_synced_at`).
- Синхронизация фиксируется в журнале изменений (action `project_synced`).
API для ИИ-агентов (json + токен)
- Новый API (`/api/projects`, защищён передаваемым ключом доступа из окружения): система может подключиться к платформе, получить и подправить данные проекта — то, что нужно n8n и ИИ-агентам.
- `GET /api/projects` — список проектов (id, name, status, tc_path, ai_ready, links).
- `GET /api/projects/{id}` — полный экспорт проекта (схема `ipd.project.export.v1`).
- `PUT /api/projects/{id}` — обновление полей из JSON (name, description, status, external_id, tc_path, source, links, meta, is_active) с валидацией; логируется `project_updated_api`.
- `POST /api/projects/{id}/sync` — триггер синхронизации из папки Total Commander.
- Без токена или с неверным токеном — `401 Unauthorized`; несуществующий проект — `404`.
Экспорт / импорт JSON (экосистема синхронизации)
- Экспорт: кнопка «Экспорт JSON» на странице проекта скачивает полный JSON проекта (схема `ipd.project.export.v1`): название, описание, статус, external_id, tc_path, links, meta, владелец, пользователи, даты. Общий сборщик payload вынесен в сервис `ProjectExporter` (используется экспортом и API).
- Импорт: форма на странице проекта загружает JSON (выгруженный экспортом) и обновляет название, описание, статус, сайты, Total Commander, external_id, source. Валидация корректности JSON и допустимости статуса.
- Импорт фиксируется в журнале изменений (action `project_imported`).
Техническое
- `APP_VERSION`: `0.16.1` → `0.17.0` (`.env` и `config/app.php`).
- Миграция `2026_08_01_110001_add_tc_and_meta_to_projects_table.php` (`tc_path`, `last_synced_at`, `meta`).
- Маршруты: `GET /admin/projects/{id}/export`, `POST /admin/projects/{id}/import`, `POST /admin/projects/{id}/sync`, API `GET/PUT/POST /api/projects...`.
- Сервисы: `app/Services/ProjectExporter.php`, `app/Services/ProjectSyncService.php`; команда `app/Console/Commands/SyncProjects.php`; middleware `app/Http/Middleware/ApiToken.php`.