From 0d3bea9e15932045737a16d04340bafcb4dfae0e Mon Sep 17 00:00:00 2001 From: Vladimir Tomashevskiy Date: Sun, 8 Feb 2026 20:35:19 +0000 Subject: [PATCH] Update TASKS_MODULE_ROADMAP.md - document shared AttachmentService --- TASKS_MODULE_ROADMAP.md | 50 +++++++++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/TASKS_MODULE_ROADMAP.md b/TASKS_MODULE_ROADMAP.md index 523daa8..24b79f9 100644 --- a/TASKS_MODULE_ROADMAP.md +++ b/TASKS_MODULE_ROADMAP.md @@ -32,48 +32,64 @@ Commit: cee6c63, 5bf25d9, 85a920b, f6aebd8 --- -## Этап 3: Вложения (Attachments) +## Этап 3: Вложения (Attachments) - Готово ✅ (общий сервис) -## Этап 4: Вложения - -### 4.1 Миграция -```php -task_attachments (id, task_id, file_name, file_path, file_size, uploaded_by, created_at) +### 3.1 Общий AttachmentService +``` +app/Services/AttachmentService.php +app/Models/AttachmentModel.php +app/Database/Migrations/2026-02-08-120000_CreateAttachmentsTable.php ``` -### 4.2 API -- uploadAttachment(), deleteAttachment() +### 3.2 Структура таблицы +``` +attachments (id, entity_type, entity_id, file_name, file_path, file_size, file_type, uploaded_by, timestamps) +``` + +### 3.3 Использование +Любой модуль может использовать AttachmentService: +```php +$attachmentService->upload('task', $taskId, $file, $userId); +$attachmentService->getByEntity('deal', $dealId); +$attachmentService->delete('contact', $contactId, $attachmentId, $userId); +``` + +### 3.4 Twig функции +- `format_filesize($bytes)` - форматирование размера файла +- `get_file_icon($fileType)` - иконка типа файла + +Commit: 052560c --- -## Этап 5: Комментарии + @mentions +## Этап 4: Комментарии + @mentions -### 5.1 Миграция +### 4.1 Миграция ```php task_comments (id, task_id, user_id, content, mentioned_users(JSON), created_at) ``` -### 5.2 Обработка @mentions +### 4.2 Обработка @mentions - Парсинг `@user_id` из текста - Создание уведомлений для упомянутых --- -## Этап 6: Зависимости задач +## Этап 5: Зависимости задач -### 6.1 Миграция +### 5.1 Миграция ```php task_dependencies (id, blocking_task_id, blocked_task_id, type) ``` -### 6.2 Логика +### 5.2 Логика - Проверка при completeTask(): если есть незавершённые blocking tasks — ошибка --- -## Этап 7: Интеграция CRM → Tasks +## Этап 6: Интеграция CRM → Tasks -### 7.1 Events +### 6.1 Events ```php Events::on('deal.created') → создать задачу "Первичный контакт" Events::on('deal.stage_changed') → при этапе "КП" создать задачу @@ -82,7 +98,7 @@ Events::on('deal.won') → создать задачу "Благодарност --- -## Этап 8: Интеграция Booking → Tasks +## Этап 7: Интеграция Booking → Tasks ```php Events::on('booking.created') → создать задачу "Подготовка к встрече"