Перейти к содержимому

Фото с объекта

Фото с объекта — визуальный журнал хода ремонта. Клиент видит их на экране «Фото» (27) в мобильном приложении — в виде именованных альбомов с горизонтальной прокруткой.

Автоматическая связка фото с категориями (Phase 04.5)

Заголовок раздела «Автоматическая связка фото с категориями (Phase 04.5)»

Если вы кладёте файлы в подпапку с именем DD-MM-YYYY внутри папки этапа, Directus автоматически создаст для вас «альбом» (photo_category) на эту дату и привяжет туда все файлы. Клиент в мобильном приложении увидит их сразу — никаких ручных действий в коллекции «Фото категории» не требуется.

  1. Откройте Библиотеку Файлов в Directus.
  2. Перейдите в Projects/<имя проекта>/<имя этапа>/. Например, для проекта «Квартира на Бухар-Жырау» (адрес: пр. Бухар-Жырау 45, кв. 12) на этапе «Замеры объекта» путь будет Projects/Квартира на Бухар-Жырау/Замеры объекта/.
  3. Создайте подпапку с именем в строгом формате DD-MM-YYYY. Пример: 05-04-2026 (5 апреля 2026).
  4. Загрузите фотографии в эту подпапку (drag-and-drop из проводника / Finder).

File Library — создание date-папки внутри папки этапа

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

File Library — файлы загружены в date-папку

Имя должно быть строго 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».

Следующие имена не триггерят автосоздание категории:

  • 5-4-2026 — без лидирующих нулей.
  • 2026-04-05 — ISO формат.
  • 5 апреля 2026 — текстовый.
  • 5.04.2026 — точки вместо дефисов.
  • Любое имя, не подходящее под формат DD-MM-YYYY (например, Замеры объекта или ProgressNotes).

Также игнорируются:

  • Файлы в подпапках внутри date-папки: 01-12-2026/raw/foo.jpgfoo.jpg не попадает в альбом.
  • Файлы в date-папке, которая НЕ под папкой этапа (например, прямо в Projects/<P>/).

Шаг 4. Что происходит при переименовании / удалении

Заголовок раздела «Шаг 4. Что происходит при переименовании / удалении»
ДействиеРезультат
Переименовали 01-12-202602-12-2026Альбом обновится: date_taken = 2026-12-02, заголовок «2 декабря 2026». Файлы остаются.
Удалили папку 01-12-2026Альбом будет удалён. Файлы остаются в Библиотеке Файлов (без привязки к альбому).
Удалили файл из date-папкиФайл убирается из альбома. Альбом сохраняется (даже если становится пустым — это маркер даты).
Перенесли файл из 01-12-2026/ в 02-12-2026/Файл переподключается: убирается из альбома 1 декабря, добавляется в альбом 2 декабря.

File Library — папка переименована, альбом синхронно обновлён

File Library — папка удалена, файлы остались как orphan

Если до развёртывания этой автоматики менеджер успел создать 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 накопились пустые папки от удалённых проектов — это задача разработчика, не менеджера.

Клиент в приложении видит новый альбом сразу же (или после pull-to-refresh, если экран был открыт до загрузки):

Мобильное приложение — экран «Фото с объекта», новый альбом по дате

«Я загрузил фото, а в приложении ничего не появилось»

  • Проверьте имя папки: должно быть строго 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-202602-12-2026: дата у альбома изменилась, фотографии остались.
  • Удалили папку 01-12-2026: альбом удалится, но файлы останутся в Библиотеке Файлов (под удалённой папкой можно восстановить вручную).
  • Если фото нужно полностью удалить — удалите файлы по отдельности до удаления папки.

Фотографии организованы в категории (коллекция Фото категории):

ПолеОписание
Название (title)Название альбома, например «Замеры», «Демонтаж», «Электрика»
Дата съёмки (date_taken)Дата фотосъёмки (YYYY-MM-DD)
Порядок (order)Порядок отображения (меньше = выше)
ПроектПривязка к проекту
Фотографии (photos)M2M-список файлов из Библиотеки Файлов
Этап (stage_id)Опциональная привязка к этапу — см. раздел ниже
  1. Откройте Контент → Фото категории → +
  2. Укажите «Название», «Дата съёмки», «Проект»
  3. В поле «Фотографии» нажмите + → загрузите JPEG-файлы с телефона или компьютера
  4. (опционально) Выберите «Этап» — см. раздел ниже
  5. Сохраните (✓)

После сохранения фотографии появятся у клиента при следующем обновлении экрана «Фото».

Альтернатива: ручное создание категории (legacy)

Заголовок раздела «Альтернатива: ручное создание категории (legacy)»

Авто-связка по date-папкам (раздел выше) — рекомендованный способ для прогрессовых фото с привязкой к дате. Но вы по-прежнему можете создавать категории вручную через коллекцию Фото категории — это нужно, например, для тематических альбомов без даты («Финальные фото», «До/После», «Замеры мебели») или для миграции старых данных.

Каждая категория может быть привязана к конкретному этапу проекта через поле stage_id («Этап» в Admin UI).

Это поле необязательное (nullable). Возможные сценарии:

Значение stage_idЧто означаетКак отображается клиенту
пусто (null)«Общие фото проекта» — не привязаны к конкретному этапуПоказываются в общем списке экрана 27 без указания этапа
ID этапаКатегория относится к конкретному этапу (например, «Электрика»)Показывается под соответствующим этапом; клиент может открыть через chevron на экране «График работ» (25) у done/active этапов
  1. Откройте категорию в Контент → Фото категории
  2. В поле «Этап» нажмите на выпадающий список
  3. Выберите нужный этап (отображается по имени)
  4. Сохраните (✓)

Типичные названия для объектов в Карагандинских ЖК:

  • «Замеры» — фото при первичных замерах
  • «Демонтаж» — снос перегородок, демонтаж покрытий
  • «Электрика» — разводка кабелей, установка розеток
  • «Сантехника» — трубы, коллекторы
  • «Стяжка» — заливка пола
  • «Штукатурка» — выравнивание стен
  • «Отделка» — финишное покрытие, плитка, обои
  • «Итог» — фото после сдачи

Фото загружаются в Библиотеку Файлов Directus и хранятся в облаке. Приложение автоматически создаёт уменьшенные превью (thumbnails) при загрузке — клиент не ждёт загрузки оригиналов.

Поддерживаемые форматы: JPEG, PNG, HEIC (iOS). Рекомендуемый размер — не более 8 МБ на файл для быстрой загрузки.