Витрины галереи — управление
Раздел админки Управление сервером → Витрины галереи
(/admin/gallery) — то, откуда наполняется публичная
Галерея моделей. Доступ только администраторам.
Одна витрина — это издание одной модели для скачивания: файлы (печать,
CAD, инструкция, чертежи), версия, лицензия и описание. Характеристики
(размах, вес, материал, фото) витрина не хранит — они берутся из записи
Справочника моделей, к которой она
привязана.
Загрузить модель целиком — пошагово
Сценарий «выложить свою облётанную модель со всем, что к ней есть»
(на примере Kestrel: название, слоган, описание, ТТХ, обложка, наборы STL,
инструкция, чертежи, лицензия, версия). Каждый шаг — отдельный экран, и
порядок важен: без файла нельзя опубликовать, без публикации витрина не
попадёт на главную, без обложки герой главной будет без картинки.
- Завести витрину —
/admin/gallery→ «+ Новая витрина» → оставить
«создать новую запись», ввести название (Kestrel) → «Создать».
Сервер заведёт запись справочника (общий каталог, без владельца) и откроет
карточку витрины/admin/gallery/<id>. Публичный адрес (/gallery/kestrel)
строится из названия и больше не меняется. - Заполнить ТТХ — на карточке витрины блок «Запись справочника» →
«Править ТТХ» (/catalog/models?edit=<id записи>): размах (мм),
длина, взлётный вес (г), мотор, число моторов, батарея, пропеллер,
сервоприводы, материал, тип сборки, ссылка; произвольные пары «ключ →
значение» — вspecs(до 40). Полоса характеристик карточки галереи и
паспорт на странице издания читают ровно эти поля, витрина их не
дублирует. - Загрузить обложку и фото — тот же блок → «Открыть запись: фото и
обложка» (/catalog/models/<id записи>) → «+ Добавить фото» (JPEG,
PNG, WebP до 5 МБ, до 10 фото, ужимаются до 800 px). Первое загруженное
становится главным; сменить главное можно в форме правки записи
(шаг 2) кликом по миниатюре. Главное фото — это обложка: её показывают
карточка в/galleryи герой главной.
Кнопка «Убрать фон» делает вырезку — она и будет отдаваться по
умолчанию (оригинал остаётся). Подробнее —
Обложка и фото. - Приложить файлы — на карточке витрины «Приложить файлы»: можно
выбрать (или бросить мышью) сразу несколько — они уйдут по одному, вид
файла из селекта применится ко всем. Что и как упаковать —
Файлы: по одному STL на деталь либо zip-группы (не больше 200
записей в архиве), инструкция — PDF (вид «инструкция», открывается
без входа), чертежи — PDF/DXF (вид «чертёж»). - Описание, сборка, история, лицензия — форма «Данные издания» на той
же карточке: аннотация (одна строка на карточке списка), описание и
заметки по сборке (markdown, до 20 000 знаков каждое), слоган героя (до
96 знаков), «история модели» (до 4 000) и теги-особенности (до 6), пресет
оформления, лицензия — подсказки типовых формулировок.
«Сохранить». - Выпустить редакцию — карточка «Редакции»: подпись (
1.0) и «что
изменилось» → «Выпустить редакцию». Состав файлов на этот момент
замораживается как редакция1.0; следующие правки состава готовят
1.1. - Опубликовать — «Опубликовать в галерее» (доступно, когда есть хотя
бы один файл). Дата публикации ставится один раз и задаёт порядок «свежие
сверху»: последняя опубликованная витрина становится флагманом главной. - Открыть раздел — публичная галерея и герой главной показываются, только
пока включён фича-флагdesign_gallery:/admin/flags→design_gallery
→ включить глобально (не процентный раскат — анониму бакет не
считается, и раздел остался бы закрыт гостям). Это отдельное действие,
витрина сама флаг не включает. - Проверить — открыть
/в приватном окне (как гость): герой — витрина
с обложкой, слоганом и «Читать дальше» на/gallery/kestrel; на странице
издания — файлы, ТТХ, фото, лицензия рядом с кнопкой скачивания. Своё фото
сборки можно добавить прямо там — у администратора оно публикуется сразу.
Как завести витрину
- «+ Новая витрина» на странице списка.
- Выбрать запись справочника — или оставить «создать новую запись» и ввести
название. - Сохранить: откроется карточка витрины.
В галерею попадают записи общего каталога и ВАША СОБСТВЕННАЯ опубликованная
модель. Витрина показывает название, характеристики и фото модели на
странице, открытой без входа, — поэтому решение выложить их принимает тот, чьи
это данные: свою опубликованную модель вы выкладываете сами.
Чужую модель — даже опубликованную — привязать нельзя: её владелец не
выбирал анонимную публикацию своих характеристик и фото. Нужна её витрина —
договаривайтесь с владельцем, заводит он.
Приватную (неопубликованную) модель привязать нельзя — сервер откажет и
подскажет следующий шаг: сначала опубликовать модель (владелец подаёт заявку из
списка моделей, админ её одобряет). После одобрения витрину можно завести
обычным порядком — характеристики переносить руками не нужно, они берутся из
той же записи, и дубль в каталоге не нужен.
Витрины без записи справочника не бывает. Если запись не выбрана, она
заводится автоматически (тип «каталог», как у общих моделей платформы) — иначе
скачавший файлы не смог бы добавить себе борт этой модели в Ангар. На одну
запись справочника приходится ровно одна витрина, поэтому в выборе видны
только записи, у которых витрины ещё нет.
Публичный адрес (/gallery/имя-модели) сервер строит из названия модели
сам: кириллица транслитерируется, совпадение с уже занятым адресом
разрешается номером в конце (raven-1-6-2). Адрес неизменяем — он попадает
во внешние ссылки и в поисковую выдачу.
Файлы
На карточке витрины: «Приложить файлы» → выбрать один или несколько
файлов (или бросить их мышью на форму) → «Загрузить». Несколько файлов
уходят по одному, в порядке выбора, вид файла из селекта применяется ко
всем; если какой-то не прошёл проверку, форма скажет, сколько успело
приложиться и какой файл отклонён — остальные после него не отправляются.
- Принимаются
stl,step/stp,3mf,pdf,zip,dxf— до 100 МБ
файл, до 50 файлов и до 500 МБ на одну редакцию; всё хранилище витрины
вместе с историей редакций — до 4 ГБ. - Наборы деталей — zip-группами. Модель из десятков STL (у Kestrel в
экспорте больше 250 файлов по папкам) целиком по одному не влезет в 50
файлов; собирайте группы («крылья по деталям», «фюзеляж и хвост»,
«эмблемы») в zip, не больше 200 записей в архиве, распакованный объём
до 1 ГБ, запись до 100 МБ. Варианты одной детали (пластина полётника
frog/gecko/cat) — отдельные файлы с говорящими именами: имя файла
видно на карточке рядом с его видом и размером, отдельной подписи у файла
нет. - Тип проверяется по содержимому, а не по расширению: переименованный в
.stlархив или видео будут отклонены. Архивы дополнительно проверяются на
«zip-бомбу» (слишком много записей, слишком большой распакованный объём,
вложенные архивы), зашифрованные архивы не принимаются — их содержимое
проверить нельзя. - Каждый файл проходит антивирус. Если сканер недоступен, загрузка
отклоняется — это осознанный выбор в пользу безопасности. - Вид файла («меш для печати», «CAD-модель», «инструкция», «чертёж»…)
определяется автоматически по формату, но его можно задать вручную: PDF
бывает и инструкцией, и чертежом. Инструкция (вид «инструкция») открывается
на странице издания без входа, остальные файлы — только вошедшим,
принявшим Условия.
Удаление файла убирает и его байты, и запись о нём (если файл не заморожен в
выпущенной редакции — тогда байты остаются, пока редакцию не «отпустят»).
Обложка и фото
Картинка карточки в /gallery и героя главной — это главное фото записи
справочника, к которой привязана витрина; витрина своих картинок не хранит.
Фото сборок от пользователей (вкладка «Фото», премодерация) — отдельная
лента ниже на странице издания, обложкой они не становятся.
Запись, заведённая витриной «по имени», — каталожная, без владельца, и её
галереей управляет администратор (тот же круг прав, что правит ТТХ
записи): на карточке записи (/catalog/models/<id>, ссылка «Открыть
запись: фото и обложка» с карточки витрины) доступны «+ Добавить фото»,
удаление слота и «Убрать фон»; выбор главного — в форме правки записи
(/catalog/models?edit=<id>, клик по миниатюре).
Чужая опубликованная пользовательская модель администратору по-прежнему
закрыта — её фото ведёт владелец.
Байты фото каталожной записи никому не списываются с квоты хранилища — у
записи нет владельца, это контент платформы.
Фото сборок, которое загружает сам модератор (администратор) — с карточки
записи или с публичной страницы издания, — публикуется сразу, без очереди
модерации, и тут же видно всем, включая гостей.
Лицензия
Поле лицензии — свободная строка (до 128 знаков), она показывается на
странице издания рядом с кнопкой скачивания. При вводе поле подсказывает
типовые формулировки: идентификаторы Creative Commons (CC-BY-4.0,
CC-BY-SA-4.0, CC-BY-NC-4.0, CC-BY-NC-SA-4.0, CC-BY-NC-ND-4.0) и
формулировку «личный экземпляр» — только собственная постройка, без
распространения и продажи. Подсказка не ограничивает: своя формулировка
сохраняется как есть.
«Что понадобится» и видео
Оба блока заполняются в карточке витрины админки (форма «Данные издания»)
или ИИ-агентом администратора (update_gallery_release, см.
ниже).
Что понадобится — список покупок, который на публичной странице
показывается группами, как у Eclipson/Flightory. Кнопка «+ Добавить
позицию» заводит строку: группа (принтер, пластик, электроника,
радиосистема, крепёж, прочее), название, количество, примечание и ссылка.
- Количество — строка с единицей: «2 шт.», «600 г», «4S 2200 мА·ч».
Число без единицы читается по-разному у пластика и у сервоприводов. - Ссылка — только
http:///https://на страницу товара или детали;
другие схемы форма отвергнет. На карточке ссылка открывается в новой
вкладке. - Строка без единого заполненного поля в сохранение не попадает; позиция
без названия — отказ с указанием поля. До 40 позиций на витрину. - Список — свойство витрины, а не редакции: он не замораживается при
выпуске версии (замораживаются только файлы) и правится на месте —
сменили рекомендуемый мотор, и карточка сразу показывает новый.
Видео — поле «Видео (YouTube)»: по одной ссылке на строку, до шести.
Принимаются только адреса роликов YouTube — youtube.com/watch?v=…,
youtu.be/… и youtube.com/shorts/…; ссылка на другой сайт, плейлист,
канал или адрес встраивания (/embed/) — отказ. Хранится идентификатор
ролика, поэтому после сохранения поле показывает адрес в единой форме
https://www.youtube.com/watch?v=…. На публичной странице ролик — это
постер и кнопка; плеер YouTube загружается только после клика читателя.
Постер сервер скачивает сам при сохранении формы и хранит вместе с
файлами витрины — читатель получает его с нашего сайта, а не с YouTube.
Если YouTube не отдал картинку (ролик приватный, удалён, сеть не ответила),
ролик всё равно сохраняется, а на карточке вместо постера стоит нейтральная
заглушка; пересохраните форму позже — сервер попробует снова.
Ключевые характеристики первого экрана карточки — размах, длина и
взлётная масса из полей записи справочника плюс нагрузка на крыло,
скорость сваливания и масса печати из «дополнительных характеристик» той
же записи. Чтобы они поднялись на первый экран, ключ характеристики нужно
взять из подсказки в форме записи (/catalog/models?edit=<id>, поле «ключ»
подсказывает типовые: «Площадь крыла, дм²», «Нагрузка на крыло, г/дм²»,
«Скорость сваливания, км/ч», «Масса печати, г», «Минимальный стол
принтера, мм», «Сопло, мм», «Каналы радио», «Профиль»). Значение вводится
как есть — платформа ничего не вычисляет за автора; ключ, введённый своими
словами, остаётся в таблице характеристик ниже на карточке.
Публикация
Кнопка «Опубликовать в галерее» делает витрину видимой в публичном
списке. Два правила, которые нельзя обойти:
- Пока к витрине не приложен ни один файл, публикация невозможна — это
проверяет сервер, а не только интерфейс. Опубликованная витрина без файлов
предлагала бы скачать то, чего нет. - Удаление последнего файла снимает публикацию — по той же причине.
Снятие публикации файлы не удаляет: витрина возвращается в черновик и её можно
дополнить.
Дата публикации ставится один раз, при первой публикации, и повторное
включение после снятия её не переписывает: по ней считается порядок «свежие
сверху» в галерее, и последняя опубликованная витрина становится флагманом
главной страницы (герой с обложкой и слоганом). Публичный раздел и герой
показываются, только пока включён фича-флаг design_gallery (/admin/flags,
глобально) — публикация витрины флаг не включает.
Галочка «Доступна в галерее» в карточке модели
Ту же публикацию можно включить прямо из карточки модели справочника
(/catalog/models/<id>) — блок «Витрина в галерее». Он виден только
администратору: публикация витрины — админская операция, как и весь её CRUD,
поэтому владелец модели, не будучи админом, этого блока не видит.
Что показывает блок:
- переключатель «Доступна в галерее» — это и есть публикация связанной
витрины. Отдельного поля «в галерее» у записи справочника нет: файлы,
лицензия, версия и счётчики живут в витрине, а справочная запись остаётся
описанием модели; - счётчики скачиваний и просмотров и число приложенных файлов;
- ссылку на карточку витрины в админке — там её дополняют файлами и
описанием; - публичный адрес витрины. Пока витрина не опубликована, адрес показан
текстом: страницы по нему ещё нет (неопубликованной витрине/gallery/…
отвечает «не найдено»). Ссылкой он становится после публикации.
Переключатель заблокирован, пока к витрине не приложен ни один файл, — с
тем же пояснением, что и на карточке витрины. Это подсказка: запрет держит
сервер, и запрос в обход интерфейса тоже получит отказ. Блокируется только
включение: снять с публикации можно всегда.
Витрины у модели ещё нет — вместо переключателя стоит кнопка «Создать
витрину». Она ведёт в раздел «Витрины галереи» с уже открытой формой
создания, где эта запись справочника выбрана заранее.
Блок есть и у вашей собственной опубликованной модели — это штатный путь
«выложить файлы своей модели», и заводить ради него пустой каталожный дубль не
нужно. У чужой модели блока нет: её витрину заводит владелец.
Модель ещё не опубликована — блока витрины у неё нет, но владелец видит на
карточке пояснение и ссылку «Опубликовать модель»: она ведёт в список моделей,
на вкладку «Мои», откуда подаётся заявка. Если заявка уже подана и ждёт
модератора, вместо ссылки стоит статус: кнопки публикации в этот момент в
списке нет, и ссылка вела бы в пустоту. Пояснение видит только владелец и
только если раздел «Галерея» ему открыт.
Удаление витрины
Удаляются и сама витрина, и все её файлы. Что произойдёт с записью справочника,
зависит от того, кто её завёл — и об этом сказано прямо в подписи к кнопке
удаления:
- Запись выбрана из справочника (или заведена раньше вручную) — она
остаётся: может быть уже связана с бортами Ангара, отзывами и фото
пользователей, а витрина — лишь издание этой модели. - Запись создана автоматически вместе с этой витриной — она удаляется
вместе с ней. Иначе после «создал витрину и передумал» в общем каталоге
оставалась бы пустая запись-дубль. Исключение: если к записи уже успели
привязать борт Ангара, она остаётся (и дальше живёт как обычная каталожная —
следующая витрина её при удалении уже не унесёт).
Если убрать запись не удалось (например, база временно недоступна), витрина всё
равно удаляется, а платформа сообщает об оставшейся записи — её можно удалить
вручную в справочнике — см. Источники моделей.
Обратный порядок запрещён: модель со связанной витриной не удаляется —
платформа отвечает отказом и называет адрес витрины. Иначе витрина осталась бы
без названия и характеристик, а её публичная страница — «не найдено». Правило
одинаково для каталожной записи и для вашей собственной опубликованной модели:
сначала витрина, потом модель.
ИИ-агент администратора
Всё, что делается на этом экране, кроме выпуска и снятия редакций, доступно и
ИИ-агенту через MCP — только с токеном со скоупом admin, выданным
администратору (права перепроверяются при каждом вызове: снятая роль
отключает токен сразу). Это то же право, что у самого экрана; другой двери к
изданиям нет — пользовательский раздел «Мои публикации» удалён, витрина —
каталог моделей платформы.
| Инструмент | Что делает |
|---|---|
list_all_gallery_releases |
Все издания, включая черновики и снятые, — коротко: статус (draft/published/withdrawn), редакция, число файлов, даты и длины текстов |
get_gallery_release_by_id |
Одно издание целиком, в том числе черновик: тексты, «что понадобится», видео, файлы, история редакций |
create_gallery_release |
Черновик по записи справочника (model_id) или с новой каталожной записью по имени (name) — те же правила и отказы, что у формы создания |
update_gallery_release |
Тексты, «что понадобится», видео, тема — меняется только переданное: «поменяй слоган» не трогает описание; пустое значение очищает поле |
set_gallery_release_published |
Опубликовать/снять; без файлов — отказ [no_files] |
delete_gallery_release |
Удалить издание с файлами; автосозданная запись справочника уходит вместе с ним |
upload_gallery_release_file |
Файл base64 до 8 МБ, та же проверка содержимого и антивирус; крупнее — POST /api/admin/gallery/<id>/files тем же токеном |
delete_gallery_release_file |
Убрать файл из текущего состава (файлы выпущенных редакций сохраняются) |
Инструменты зовут те же операции, что и кнопки этого экрана, поэтому и
результат, и записи аудита у них одинаковые — различается только исполнитель.
Рядом с кнопкой «Новое издание» стоит бейдж «✨ ИИ» — он ведёт на страницу
«Автоматизация с ИИ» с этим набором инструментов.
Если вы и агент сохраняете одно издание в один и тот же момент (например,
агент прикладывает файл, пока у вас сохраняется описание с роликом и
скачивается его постер), второе сохранение отклоняется с сообщением
«издание изменилось» — повторите его, и ничего не потеряется: приложенный
файл не пропадёт из-за сохранения описания. Сами тексты издания по-прежнему
записывает целиком тот, кто сохранил последним.
Что попадает в аудит
Создание, правка, удаление, публикация и снятие с публикации, а также
добавление и удаление файлов пишутся в
журнал действий (тип сущности «Витрина модели»).
Отдельно записываются отклонённые загрузки — имя файла, размер и причина
отказа (тип «Файл витрины»): по ним видно, что именно не пропустила проверка.