Задания и версии
В предлагаемой модели каждая генерация создаёт отдельную версию, а постоянная ссылка указывает на последнюю опубликованную.
Задание, версия и публикация — три разных состояния.
Ниже — проект модели. Это не названия существующих таблиц или перечислений API.
Что сохраняем
| Сущность | Зачем нужна |
|---|---|
| Проект | Постоянный сайт, владелец, исходный запрос и материалы |
| Задание | Что попросили сделать, исходная версия, состояние попытки и ошибка |
| Версия | Готовый набор файлов, происхождение, результат проверок |
| Публикация | Какая версия сейчас открывается по адресу сайта |
| Домен | Проверенная связь адреса с проектом и состояние HTTPS |
Готовые версии неизменяемы. Правка создаёт следующую; откат выбирает прежнюю. Историю Git можно использовать как часть реализации, но она не заменяет явное состояние публикации.
Путь задания
text
Принято → Ожидает → Выполняется → Проверяется → Готово
└───────────────→ Ошибка / ОтмененоПредлагаемый первый вариант — хранить задания в PostgreSQL и выдавать исполнителю ограниченное по времени право выполнения. Нужны продление этого права, счётчик попыток и возврат зависших задач в обработку. Конкретную библиотеку очереди выбираем после проверки; Redis пока не является обязательной частью схемы.
Повтор HTTP-запроса с тем же ключом идемпотентности не создаёт второй сайт. Повтор выполнения может вызвать AI ещё раз, поэтому стоимость и предел попыток учитываются отдельно. Обещания «ровно одно выполнение» нет; запись результата должна быть защищена от повторного применения.
Одновременные правки
Для первой версии предлагаем последовательную обработку изменений одного проекта. Каждая команда фиксирует версию, с которой начиналась. Если она устарела, показываем конфликт и предлагаем повторить правку на новом варианте; молча перезаписывать чужое изменение нельзя.
Отмена прекращает дальнейшие действия и запрещает публикацию результата отменённой попытки. Она не означает, что уже отправленный провайдеру запрос не будет оплачен.
Публикация
- Загрузить все файлы версии в отдельное место.
- Проверить наличие файлов, ссылки, мобильный вид и целевую кнопку.
- Зафиксировать готовность версии.
- По команде владельца переключить указатель публикации с проверкой исходной версии.
- Обновить кеш адреса и проверить выдачу результата.
При сбое до переключения посетители продолжают видеть прежнюю версию. При проблеме после него указатель возвращается назад, а кеш обновляется повторно. Файлы, на которые ещё ссылается публикация или откат, не удаляются сборщиком мусора.
Снятие с публикации убирает публичную выдачу и кеш, но не обязательно удаляет проект. Удаление проекта и сроки хранения резервных копий требуют отдельной политики. Старая ссылка не должна перейти чужому владельцу. Правила доменов.