Коротко: единичный endpoint принимает массив публикаций от внешнего партнёра и создаёт каждую из них в БД. Перед созданием проверяется, что пользователь имеет доступ на автопостинг во всем наборе каналов (атомарно). В теле запроса — подробная валидация (особенно для ALBUM), publish_date нормализуется (timezone убирается). Файловые ресурсы (если указаны file_url) резолвятся в file_id через rekla_bot до сохранения.
media_type == ALBUM • Поле album обязательно и не пустое. • Только последний элемент album[“album”][-1] может иметь caption. У всех остальных caption должен быть пустым. • text публикации должен совпадать с caption последнего медиа (text == last_media.caption or "").
publish_date • Принимается ISO строкой или datetime. Любая tz-информация удаляется (метод remove_tz): если строка содержит Z, она конвертируется в +00:00, затем tz удаляется — в БД сохраняется naive datetime.
text: • Если text отсутствует (null), валидатор конвертирует в пустую строку.
report_timeout (внутри DTO, если используется): только 24 или 48.
При передаче file_url для не-текстовых медиа: система попытается получить file_id через rekla_bot.get_file_id_by_url. Если это провалится — запрос потерпит ошибку (логирование).