Skip to content

PROD: обновить новостную ленту - #376

Merged
TThanos3000 merged 1 commit into
masterfrom
codex/prod-news-feed-angular
Sep 24, 2026
Merged

TThanos3000 merged 1 commit into
masterfrom
codex/prod-news-feed-angular

Conversation

@TThanos3000

Copy link
Copy Markdown
Contributor

Что сделано

В master селективно перенесено финальное проверенное состояние общей новостной ленты из DEV после PR #375.

Это semantic selective port, а не merge dev → master и не механический cherry-pick merge-коммитов.

  • Base: 8f0202ab0937965bb548a93ca32c7fc6ff0e9242
  • Head: a21ea1108a2458e9108f6dd2be5f36617e7e096c
  • Целевая ветка: master
  • Итоговый scope: 67 файлов, неожиданных файлов вне согласованного scope нет.

Источник DEV

Финальное DEV-состояние: bdb5cf4780be0daa3e441d6b152511fcbe638d4e.

Функциональность

  • Поддержан расширенный контракт GET /feed/: published_at и глобальные counts для шести категорий при сохранении полей пагинации.
  • published_at преобразуется в publishedAt, дата выводится в формате DD.MM.YYYY.
  • Фильтры показывают реальные category counts с единой типографикой и выравниванием.
  • Desktop feed использует CSS Grid в две колонки с порядком 1 2 / 3 4 / 5 6.
  • Пагинация загружает по 6 элементов и добавляет следующую страницу в конец списка.
  • Сохранены типы карточек: «Новая вакансия», «Новости проекта», «Новости людей», «Новый проект».
  • Высота выравнивается только внутри одного grid-row; глобальная фиксированная высота не возвращалась.
  • Для project/people news в общей ленте добавлены компактный preview и modal с полным текстом, изображениями без crop, carousel, файлами, source, type/date, like/share/views и CTA.
  • Modal использует уже загруженный FeedNews и не выполняет дополнительный detail request.
  • Like state синхронизирован между preview и modal через существующий event/facade flow.
  • Поддержаны мышь, Enter, Space, Escape, close button, backdrop и возврат focus.
  • Финальная meta-строка DEV: улучшить мета-информацию карточек новостей #375: like и share слева, views справа, иконки 16 × 16 px, числа 12 px с tabular nums, единая горизонтальная ось.
  • Industry у project news остаётся в верхней badge/meta-зоне и не дублируется в footer.
  • Compact/modal-поведение ограничено общей лентой для feedType === project | people; legacy NewsCard на остальных surfaces не менялся.

Backend/frontend contract

Angular PR ожидает совместимый ответ GET /feed/:

{
  "count": 6,
  "next": null,
  "previous": null,
  "results": [
    {
      "type_model": "news",
      "content": {},
      "published_at": "..."
    }
  ],
  "counts": {
    "all": 86,
    "project": 56,
    "vacancy": 3,
    "news": 27,
    "partnerprogram": 0,
    "education": 0
  }
}

Новых backend-доменов для программ и образования этот PR не добавляет.

Автоматические проверки

  • ✅ npm run lint:ts — exit 0, ошибок нет; 6 существующих warnings находятся вне scope PR.
  • ✅ Stylelint для 9 изменённых SCSS-файлов — exit 0.
  • ✅ Prettier --check для 46 изменённых текстовых файлов — exit 0.
  • ✅ Targeted Vitest — 15/15 файлов, 53/53 теста, exit 0, 31.61 s.
  • ⚠️ Обычный npm run test:ci — 391/392 файлов и 1883/1884 теста, exit 1, 685.10 s. Единственный несвязанный timeout — export-regions-workbook.spec.ts:7 (лимит 10 s).
  • ✅ Повтор полного suite через npm run test:ci -- --pool=forks — 392/392 файлов, 1884/1884 теста, exit 0, 493.55 s; тот же XLSX-тест прошёл за 642 ms.
  • ✅ npm run build:prod — exit 0; wrapper 88.531 s, Angular build 67.164 s; initial bundle 1.40 MB raw / 314.25 kB transfer.
  • ✅ git diff --check — exit 0; только диагностические предупреждения Git о будущем LF→CRLF.
  • ✅ Scope-аудит — 67 файлов, unexpected files: 0.

Побочное изменение sprite.css.svg после Windows build восстановлено и в diff не входит. Package-файлы, scripts и workflows не менялись.

Браузерная приёмка

Acceptance выполнен в Chrome 153 на реальных FeedComponent, FeedInfoService, карточках и modal текущего порта с локальными fake use cases.

Проверены viewport 1440 × 900, 1280 × 900, 1024 × 900, 390 × 844:

  • horizontal overflow — 0 px везде;
  • ширина desktop-карточек: 423.328 px при 1440/1280 и 368.75 px при 1024;
  • высоты desktop-рядов: 267.5 / 308 / 350 px при 1440/1280 и 267.5 / 328 / 350 px при 1024;
  • mobile-карточка имеет ширину 375 px, измеренные высоты: 222 / 267.5 / 306 / 326 / 276 / 350 px;
  • thumbnail — 120 × 67.5 px, object-fit: cover;
  • counts — 12 / 3 / 3 / 6 / 0 / 0, проверены active filter и mobile dropdown;
  • пагинация — 6 → 12, исходные элементы сохранены, новые добавлены в конец, ключи уникальны, запрос имеет offset=6, limit=6 и выбранный type;
  • карточки одного desktop-row имеют одинаковую высоту и одинаковую Y-позицию CTA, разные ряды независимы;
  • portrait modal: body 880 × 810 px, изображение 408 × 612 px; square 612 × 612 px; 4:3 816 × 612 px; 16:9 — 840 × 472.5 px; panorama — 840 × 168 px; mobile portrait — 319 × 478.5 px;
  • modal сохраняет natural aspect ratio через object-fit: contain;
  • проверены mouse, Enter, Space, Escape, close button, backdrop и возврат focus;
  • like синхронизируется между preview и modal: 234 ↔ 233;
  • like/share/source/CTA не открывают modal;
  • открытие modal не вызывает дополнительный feed/detail fetch;
  • ошибок и предупреждений в консоли нет.

Полный протокол и точные измерения: docs/prod-feed-news/README.md и docs/prod-feed-news/geometry.json.

Скриншоты

Сценарий Скриншот
Общий feed · 1440 Общий feed 1440
Верхние фильтры Верхние фильтры
Карточка вакансии Карточка вакансии
Длинная новость Длинная новость
Новость с изображением Новость с изображением
Modal и несколько изображений Modal и несколько изображений
Mobile feed · 390 Mobile feed 390
Mobile modal · 390 Mobile modal 390

Границы browser fixture

  • Live backend и авторизация не использовались; contract отдельно покрыт unit/regression-тестами.
  • Standalone TestBed подтверждает active filter, параметры fetch и результат, но не является production-проверкой синхронизации query с адресной строкой.
  • Global FeedComponent не передаёт isOwner, поэтому owner dots недоступны в fixture; исключение owner actions из открытия modal покрыто component regression-тестами.
  • Для вложения проверены href и download; системное скачивание не запускалось.
  • Clipboard заменён recorder-stub с проверкой переданного URL.

Вне scope

  • React не изменялся.
  • Dependencies, package scripts и workflows не изменялись.
  • Посторонние DEV-изменения не переносились.
  • Backend-код в этот Angular PR не входит.
  • Merge и deploy не выполнялись.

@TThanos3000
TThanos3000 marked this pull request as ready for review September 24, 2026 13:33
@TThanos3000
TThanos3000 merged commit 0cd4bb8 into master Sep 24, 2026
@TThanos3000
TThanos3000 deleted the codex/prod-news-feed-angular branch September 24, 2026 13:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant