Фото с объекта
Фото с объекта — визуальный журнал хода ремонта. Клиент видит их на экране «Фото» (27) в мобильном приложении — в виде именованных альбомов с горизонтальной прокруткой.
Автоматическая связка фото с категориями (Phase 04.5)
Заголовок раздела «Автоматическая связка фото с категориями (Phase 04.5)»Если вы кладёте файлы в подпапку с именем DD-MM-YYYY внутри папки этапа, Directus автоматически создаст для вас «альбом» (photo_category) на эту дату и привяжет туда все файлы. Клиент в мобильном приложении увидит их сразу — никаких ручных действий в коллекции «Фото категории» не требуется.
Шаг 1. Создание date-папки и загрузка файлов
Заголовок раздела «Шаг 1. Создание date-папки и загрузка файлов»- Откройте Библиотеку Файлов в Directus.
- Перейдите в
Projects/<имя проекта>/<имя этапа>/. Например, для проекта «Квартира на Бухар-Жырау» (адрес: пр. Бухар-Жырау 45, кв. 12) на этапе «Замеры объекта» путь будетProjects/Квартира на Бухар-Жырау/Замеры объекта/. - Создайте подпапку с именем в строгом формате
DD-MM-YYYY. Пример:05-04-2026(5 апреля 2026). - Загрузите фотографии в эту подпапку (drag-and-drop из проводника / Finder).

Через 1–2 секунды клиент увидит на экране «Фото с объекта» новый альбом с заголовком «5 апреля 2026».

Шаг 2. Формат имени папки
Заголовок раздела «Шаг 2. Формат имени папки»Имя должно быть строго DD-MM-YYYY:
- 2 цифры дня →
-→ 2 цифры месяца →-→ 4 цифры года. - Лидирующие нули обязательны в дне и месяце.
- Примеры валидных имён:
01-12-2026,05-04-2026,31-12-2099.
Заголовок альбома в мобилке формируется автоматически в русском родительном падеже без ведущего нуля у дня: 01-12-2026 → «1 декабря 2026», 05-04-2026 → «5 апреля 2026».
Шаг 3. Что игнорируется
Заголовок раздела «Шаг 3. Что игнорируется»Следующие имена не триггерят автосоздание категории:
5-4-2026— без лидирующих нулей.2026-04-05— ISO формат.5 апреля 2026— текстовый.5.04.2026— точки вместо дефисов.- Любое имя, не подходящее под формат
DD-MM-YYYY(например,Замеры объектаилиProgressNotes).
Также игнорируются:
- Файлы в подпапках внутри date-папки:
01-12-2026/raw/foo.jpg→foo.jpgне попадает в альбом. - Файлы в date-папке, которая НЕ под папкой этапа (например, прямо в
Projects/<P>/).
Шаг 4. Что происходит при переименовании / удалении
Заголовок раздела «Шаг 4. Что происходит при переименовании / удалении»| Действие | Результат |
|---|---|
Переименовали 01-12-2026 → 02-12-2026 | Альбом обновится: date_taken = 2026-12-02, заголовок «2 декабря 2026». Файлы остаются. |
Удалили папку 01-12-2026 | Альбом будет удалён. Файлы остаются в Библиотеке Файлов (без привязки к альбому). |
| Удалили файл из date-папки | Файл убирается из альбома. Альбом сохраняется (даже если становится пустым — это маркер даты). |
Перенесли файл из 01-12-2026/ в 02-12-2026/ | Файл переподключается: убирается из альбома 1 декабря, добавляется в альбом 2 декабря. |


Шаг 5. Backfill для существующих папок
Заголовок раздела «Шаг 5. Backfill для существующих папок»Если до развёртывания этой автоматики менеджер успел создать date-папки и заливать туда файлы, выполните backfill:
cd backend
# Сначала dry-run — посмотреть, что будет создано без реальных записейDIRECTUS_URL=http://localhost:8055 \ DIRECTUS_ADMIN_TOKEN=<admin-static-token> \ npx tsx scripts/backfill-photo-categories.ts --dry-run
# Если вывод устраивает — реальный прогонnpm run photos:backfill:devСкрипт идемпотентный — повторный запуск ничего не создаёт (created 0, files-linked 0 на втором проходе). Для других инстансов — npm run photos:backfill:test или npm run photos:backfill:docs (требуют DIRECTUS_ADMIN_TOKEN_<port>).
Если в File Library накопились пустые папки от удалённых проектов — это задача разработчика, не менеджера.
Шаг 6. Результат в мобилке
Заголовок раздела «Шаг 6. Результат в мобилке»Клиент в приложении видит новый альбом сразу же (или после pull-to-refresh, если экран был открыт до загрузки):

Шаг 7. Troubleshooting
Заголовок раздела «Шаг 7. Troubleshooting»«Я загрузил фото, а в приложении ничего не появилось»
- Проверьте имя папки: должно быть строго
DD-MM-YYYY(например,05-04-2026— день, месяц, год через дефис, по 2/2/4 цифры). - Распространённые ошибки:
5-4-2026(без ведущих нулей — игнорируется),2026-04-05(ISO формат — игнорируется),5 апреля 2026(текст — игнорируется),5.04.2026(точки вместо дефисов — игнорируется). - Папка должна лежать внутри папки этапа, не в корне проекта. Структура:
Projects/<проект>/<этап>/05-04-2026/foo.jpg.
«Фото лежат в правильной папке, но в приложении не появляются»
- Pull-to-refresh на экране «Фото с объекта» в мобильном приложении (потяните вниз) — мобилка перечитает каталог.
- Если не помогло — проверьте через File Library, что папка действительно вложена в правильный этап (хлебные крошки сверху).
- Если папка появилась после релиза автоматики — запустите backfill (Шаг 5) однократно.
«Я переименовал/удалил папку — что произошло с фото?»
- Переименовали
01-12-2026→02-12-2026: дата у альбома изменилась, фотографии остались. - Удалили папку
01-12-2026: альбом удалится, но файлы останутся в Библиотеке Файлов (под удалённой папкой можно восстановить вручную). - Если фото нужно полностью удалить — удалите файлы по отдельности до удаления папки.
Структура
Заголовок раздела «Структура»Фотографии организованы в категории (коллекция Фото категории):
| Поле | Описание |
|---|---|
| Название (title) | Название альбома, например «Замеры», «Демонтаж», «Электрика» |
| Дата съёмки (date_taken) | Дата фотосъёмки (YYYY-MM-DD) |
| Порядок (order) | Порядок отображения (меньше = выше) |
| Проект | Привязка к проекту |
| Фотографии (photos) | M2M-список файлов из Библиотеки Файлов |
| Этап (stage_id) | Опциональная привязка к этапу — см. раздел ниже |
Добавление фотографий
Заголовок раздела «Добавление фотографий»- Откройте Контент → Фото категории →
+ - Укажите «Название», «Дата съёмки», «Проект»
- В поле «Фотографии» нажмите
+→ загрузите JPEG-файлы с телефона или компьютера - (опционально) Выберите «Этап» — см. раздел ниже
- Сохраните (✓)
После сохранения фотографии появятся у клиента при следующем обновлении экрана «Фото».
Альтернатива: ручное создание категории (legacy)
Заголовок раздела «Альтернатива: ручное создание категории (legacy)»Авто-связка по date-папкам (раздел выше) — рекомендованный способ для прогрессовых фото с привязкой к дате. Но вы по-прежнему можете создавать категории вручную через коллекцию Фото категории — это нужно, например, для тематических альбомов без даты («Финальные фото», «До/После», «Замеры мебели») или для миграции старых данных.
Связь категории с этапом
Заголовок раздела «Связь категории с этапом»Каждая категория может быть привязана к конкретному этапу проекта через поле stage_id («Этап» в Admin UI).
Это поле необязательное (nullable). Возможные сценарии:
Значение stage_id | Что означает | Как отображается клиенту |
|---|---|---|
| пусто (null) | «Общие фото проекта» — не привязаны к конкретному этапу | Показываются в общем списке экрана 27 без указания этапа |
| ID этапа | Категория относится к конкретному этапу (например, «Электрика») | Показывается под соответствующим этапом; клиент может открыть через chevron на экране «График работ» (25) у done/active этапов |
Как привязать категорию к этапу
Заголовок раздела «Как привязать категорию к этапу»- Откройте категорию в Контент → Фото категории
- В поле «Этап» нажмите на выпадающий список
- Выберите нужный этап (отображается по имени)
- Сохраните (✓)
Рекомендации по именованию категорий
Заголовок раздела «Рекомендации по именованию категорий»Типичные названия для объектов в Карагандинских ЖК:
- «Замеры» — фото при первичных замерах
- «Демонтаж» — снос перегородок, демонтаж покрытий
- «Электрика» — разводка кабелей, установка розеток
- «Сантехника» — трубы, коллекторы
- «Стяжка» — заливка пола
- «Штукатурка» — выравнивание стен
- «Отделка» — финишное покрытие, плитка, обои
- «Итог» — фото после сдачи
Загрузка файлов
Заголовок раздела «Загрузка файлов»Фото загружаются в Библиотеку Файлов Directus и хранятся в облаке. Приложение автоматически создаёт уменьшенные превью (thumbnails) при загрузке — клиент не ждёт загрузки оригиналов.
Поддерживаемые форматы: JPEG, PNG, HEIC (iOS). Рекомендуемый размер — не более 8 МБ на файл для быстрой загрузки.