- Enhanced tests to ensure consistent messageId generation for legacy inbox rows lacking a messageId. - Updated test descriptions for better clarity regarding the new messageId handling. - Adjusted test expectations to align with the updated behavior of relaying legacy inbox rows with generated messageIds.
3.6 KiB
3.6 KiB
Итерация 01 — каркас проекта + качество кода + базовая архитектура
Цель
Поднять Nuxt 3 проект под SSG, включить Vuetify, i18n, Pinia, ESLint+Prettier и заложить архитектурные правила.
Ключевые принципы (чтобы потом не переделывать)
- Лендинг деплоится как статик (SSG), поэтому не закладываем фичи, которые требуют сервер на каждый запрос.
- Источник правды по контенту:
landing/data/*+landing/locales/*. Компоненты секций рендерят данные, а не “хранят смысл внутри себя”. - Логика, которую хочется тестировать, живёт в
landing/utils/*. Всё что про Nuxt/Vue — вcomposables/*.
Шаги
- Создать проект
landing/(Nuxt 3):- SSG-ориентация: конфиг и скрипты сборки/генерации.
- Подключить Vuetify 3:
- Material 3, темы (dark/light), сохранение выбора.
- Подключить i18n:
- 6 языков, стратегия URL (prefix_except_default).
- Автовыбор языка при первом визите: cookie (если выбирали) → настройки браузера → fallback.
- Важно: IP-гео в рамках статического лендинга не используем.
- Подключить Pinia:
- Stores для: темы, локали, платформы/архитектуры, ссылок загрузки.
- ESLint + Prettier:
@nuxt/eslint, Prettier, единые правила форматирования.- Команды
lint,lint:fix,format.
- Структура папок:
- Добавить
landing/data,landing/types,landing/utils. - Зафиксировать правило: composables = Nuxt/Vue, utils = чистые функции.
- Добавить
Выход (deliverables)
- Проект собирается и генерится в SSG режиме.
- Локализация/темы/Pinia подключены и работают в минимальном виде.
- Линтер/форматтер настроены, есть команды в
package.json. - Созданы заготовки данных и типов (без бизнес-логики секций).
- Есть короткий README как запускать/собирать локально (одинаково для всей команды).
Критерии готовности
pnpm/yarn/npmworkflow согласован и описан.generate/build/previewпроходят локально.- ESLint и Prettier не конфликтуют (нет “пинпонга” форматирования).
- Подтвержден publish directory для статического хостинга (чтобы потом не гадать на деплое).
Чеклист перепроверки (2–3 прохода)
- SSG: нет использования SSR-only API в runtime.
- i18n: URL стратегия соответствует требованиям SEO.
- Pinia: состояния не дублируются в компонентах.
- Минимальная страница открывается без ошибок с отключённым JS (хотя бы смысловой контент).