Skip to content

PROD: расширить контракт новостной ленты - #753

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

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

Conversation

@TThanos3000

Copy link
Copy Markdown
Collaborator

Что сделано

В PROD селективно перенесён проверенный контракт общей новостной ленты из DEV PR #752.

Это semantic selective port, а не merge dev → master и не слепой cherry-pick merge-коммита: DEV и PROD разошлись, поэтому перенесены только изменения GET /feed/.

Контракт API

Стандартная пагинация сохранена:

  • count
  • next
  • previous
  • results

Каждый элемент results дополнительно содержит published_at — дату публикации соответствующей записи ленты.

В корень ответа добавлен объект counts:

{
  "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
  }
}

Особенности контракта:

  • count по-прежнему относится к текущему фильтру;
  • counts рассчитывается по всей доступной пользователю ленте;
  • counts не зависит от type, limit и offset;
  • project включает новости проектов и записи о новых проектах;
  • news включает новости пользователей;
  • partnerprogram и education остаются равны 0, поскольку эти домены текущий endpoint не выдаёт;
  • all — сумма поддерживаемых категорий;
  • порядок элементов детерминирован: -datetime_created, затем -pk.

Visibility

Сохранены действующие ограничения общей ленты:

  • черновики проектов не выдаются и не учитываются;
  • закрытые проекты и их новости не выдаются и не учитываются;
  • неактивные вакансии не выдаются и не учитываются;
  • вакансии закрытых или черновых проектов не выдаются и не учитываются;
  • новости программ не добавляются в общий feed;
  • существующие фильтры и состояние лайков сохранены.

Изменённые файлы

Ровно четыре файла:

  • feed/serializers.py
  • feed/views.py
  • feed/tests/test_feed_api.py
  • docs/modules/feed-categories.md

Новых migrations нет.

Что намеренно не переносилось

Из DEV PR #752 исключены изменения домена «Моя активность»:

  • projects/managers.py
  • projects/tests/test_project_count.py
  • docs/modules/project-activity-count.md
  • изменение семантики my_in_program

Эти изменения не относятся к общей новостной ленте и должны переноситься отдельным PROD PR.

Также не изменялись React, зависимости, workflows, модели и API других доменов.

Проверки

PostgreSQL targeted suite:

  • feed.tests.test_feed_api;
  • 14/14 тестов успешно, 2.291 s.

Регрессии покрывают published_at для пользовательской и проектной новости, нового проекта и вакансии; глобальные counts; независимость counts от limit/offset; visibility; pagination contract; детерминированный tie-break по pk через границу страниц; существующие фильтры и лайки.

Полный PostgreSQL suite:

  • 1575/1575 тестов успешно;
  • 3 skipped;
  • 0 failures, 0 errors;
  • 1256.838 s.

Дополнительные проверки:

  • ✅ python manage.py check — успешно;
  • ✅ python manage.py check --tag models — успешно;
  • ✅ python manage.py makemigrations --check --dry-run — новых migrations нет;
  • ✅ Black для изменённых Python-файлов — успешно;
  • ✅ Flake8 для изменённых Python-файлов — успешно;
  • ✅ git diff --check — успешно; только диагностическое предупреждение Git о будущем LF→CRLF.

Тесты выполнялись на PostgreSQL 15; backend подтвердил поддержку select_for_update.

Ограничения операции

  • React не изменялся.
  • Workflows и dependencies не изменялись.
  • DEV не изменялся.
  • Merge не выполнялся.
  • Deploy не выполнялся.

@TThanos3000
TThanos3000 marked this pull request as ready for review September 24, 2026 12:29
@TThanos3000
TThanos3000 merged commit 24fb951 into master Sep 24, 2026
5 checks passed
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