Меняется источник, сохраняется контракт
Сведения о курортах, филиалах, контактах и материалах приходят через типизированные снимки данных. В текущей реализации репозиторий читает локальный мок. Компонент получает данные через публичный экспорт слоя и не выбирает серверный адрес самостоятельно.
Для базы знаний контракт — KnowledgeSnapshot, а граница источника — KnowledgeRepository.read(). Подключение отдельного бэкенда заменяет реализацию read(), сохраняя структуру снимка.
interface KnowledgeRepository {
read(): Promise<KnowledgeSnapshot>;
}
const snapshot = parseKnowledgeSnapshot(
await knowledgeRepository.read(),
);Проверка и композиция
Ответ API проверяется на границе: локали RU/EN, уникальность ID и slug, существование категории, безопасные ссылки, даты и идентификаторы частей статьи. Невалидный ответ не превращается молча в выдуманные сведения.
Модели и репозитории принадлежат entities. Пользовательские сценарии — features, композиция страниц — _pages и _app. Общие компоненты и утилиты shared не импортируют бизнес-сущности верхних слоёв.
Чек-лист подключения
- Сверьте DTO с локальным контрактом, включая пустые значения и обе локали.
- Проверьте ошибки загрузки и неизвестные идентификаторы.
- Используйте один снимок для страницы, метаданных, JSON-LD и sitemap.
- Настройте обновление серверного кеша после публикации и изменения статьи.
- Повторите поиск, прямые ссылки, смену языка и чтение посещённой статьи офлайн.