📊 Статусы альбома (справочник)

Карточные статусы (Dashboard)

Это вычисляемые статусы для отображения на Рабочем столе.

Статус Цвет Условие Клиенты Ретушь Печать
active 🟢 Зелёный PUBLISHED + не истёк
warning 🟡 Жёлтый PUBLISHED + < 24ч до истечения
processing 🔵 Синий PUBLISHED + истёк
archived ⚪ Серый HIDDEN или EXPIRED
setup ⚪ Серый DRAFT, SYNCING, ERROR, READY

База данных (AlbumStatus)

Это статусы в базе данных (enum).

Статус Label Описание Доступен клиентам?
DRAFT Черновик Создан, но не синхронизирован
SYNCING Синхронизация Загрузка фото с диска
ERROR Ошибка Ошибка при синхронизации
PROCESSING Обработка AI Распознавание лиц (если включено)
READY Готов к публикации Синхронизирован, можно публиковать
PUBLISHED Опубликован Доступен клиентам
HIDDEN Скрыт Скрыт вручную фотографом
EXPIRED Истёк Срок жизни истёк (cron)

Связь DB Status → Card Status

// Album::getCardStatus()

if (HIDDEN || EXPIRED) → 'archived'
if (!PUBLISHED) → 'setup'
if (expires_at && isPast) → 'processing'
if (expires_at && diffInHours < 24) → 'warning'
else → 'active'

Логика

                    ┌─────────────┐
                    │  PUBLISHED  │
                    └──────┬──────┘
                           │
           ┌───────────────┼───────────────┐
           │               │               │
           ▼               ▼               ▼
     expires_at       expires_at      no expires_at
      is future       is past         (infinite)
           │               │               │
           ▼               ▼               ▼
     ┌─────────┐     ┌─────────┐     ┌─────────┐
     │ < 24h?  │     │processing│     │ active  │
     └────┬────┘     └─────────┘     └─────────┘
          │
    ┌─────┴─────┐
    │           │
    ▼           ▼
 warning      active

Транзиции DB статусов

                                    ┌─────────┐
                                    │  ERROR  │◄──────────────────┐
                                    └────┬────┘                   │
                                         │ "Повторить"            │
                                         ▼                        │
┌─────────┐    "Синхронизировать"  ┌─────────┐    error           │
│  DRAFT  │───────────────────────►│ SYNCING │────────────────────┤
└─────────┘                        └────┬────┘                    │
                                        │                         │
                          ┌─────────────┴─────────────┐           │
                          │ done                      │           │
                          ▼                           │           │
                    ┌─────────┐                       │           │
                    │  READY  │◄──────────────────────┼───────────┘
                    └────┬────┘                       │
                         │ "Опубликовать"             │ "Синхронизировать"
                         │ (Галерея)                  │
                         ▼                            │
                   ┌───────────┐                      │
                   │ PUBLISHED │──────────────────────┤
                   └─────┬─────┘                      │
                         │                            │
            ┌────────────┴────────────┐               │
            │ "Скрыть"                │ expires       │
            │                         │ (cron)        │
            ▼                         ▼               │
      ┌─────────┐               ┌─────────┐           │
      │ HIDDEN  │──────────────►│ EXPIRED │───────────┘
      └────┬────┘               └────┬────┘
           │                         │
           │ "Синхронизировать"      │ "Синхронизировать"
           │                         │
           └─────────────────────────┴──────────► SYNCING → READY

Методы AlbumStatus

Метод Возвращает true для
isAccessible() PUBLISHED
canPublish() READY, HIDDEN, EXPIRED
canUnpublish() PUBLISHED
canDelete() DRAFT, ERROR, READY
canSync() DRAFT, ERROR, HIDDEN, EXPIRED

На что влияют статусы?

Клиентская галерея

  • isAccessible() = true → галерея доступна
  • isAccessible() = false → страница "Альбом недоступен"

Заказы

Card Status Новые заказы Изменение заказа
active
warning
processing
archived

Печать (в Dashboard)

Card Status Печать
active 🔒 Заблокирована
warning 🔒 Заблокирована
processing ✅ Доступна
archived 🔒 Недоступна

Ретушь (в Dashboard)

Card Status Ретушь
active ✅ Доступна
warning ✅ Доступна
processing ✅ Доступна
archived 🔒 Недоступна

Кнопки по статусам

Статус Dashboard Галерея (владелец)
DRAFT 🔄 Синхронизировать
SYNCING ⏳ Синхронизация...
ERROR 🔄 Повторить
READY 👁️ Предпросмотр и публикация 📢 Опубликовать
PUBLISHED 🔗 Поделиться, ⏸️ Скрыть
HIDDEN 🔄 Синхронизировать, 👁️ Предпросмотр 📢 Опубликовать
EXPIRED 🔄 Синхронизировать, 👁️ Предпросмотр 📢 Опубликовать*

*только если expires_at > now или указан новый срок


Console Commands

albums:expire

Переводит PUBLISHED → EXPIRED если expires_at < now.

php artisan albums:expire

Запускается каждый час через scheduler.