@@ -11,7 +11,8 @@ Feed отвечает за общую ленту `/feed/`.
1111## Статус модуля
1212
1313Модуль рабочий, но небольшой и связан с ` news ` , ` projects ` и ` vacancy ` .
14- Основная логика сосредоточена во view, serializer и service helpers.
14+ Основная логика сосредоточена во view, serializer, service helpers и signal
15+ handlers для служебных записей.
1516
1617## Основные возможности
1718
@@ -31,8 +32,9 @@ Feed отвечает за общую ленту `/feed/`.
3132- ` feed/services.py ` - helpers для лайков и служебных feed-записей.
3233- ` feed/mapping.py ` - соответствие content object типам и serializers.
3334- ` feed/constants.py ` - типы моделей, для которых signals создают feed-записи.
34- - ` feed/signals.py ` - подключение signal handlers.
35- - ` feed/tests/ ` - regression-тесты API и service helpers.
35+ - ` feed/signals.py ` - создание и удаление служебных feed-записей для проектов
36+ и вакансий.
37+ - ` feed/tests/ ` - regression-тесты API, service helpers и signal handlers.
3638
3739## Основные сценарии
3840
@@ -56,6 +58,10 @@ View выбирает подходящие `news.News`, сериализует
5658Они используют ` news.News ` с пустым ` text ` и связью на объект, например проект
5759или вакансию.
5860
61+ Для служебной записи проекта ` type_model = "project" ` , а ` content ` содержит
62+ проект. Для служебной записи вакансии ` type_model = "vacancy" ` , а ` content `
63+ содержит вакансию.
64+
5965### 4. Проект становится недоступным для публичной ленты
6066
6167Если проект черновой или непубличный, связанные с ним записи не возвращаются в
@@ -65,26 +71,35 @@ View выбирает подходящие `news.News`, сериализует
6571
6672- ` GET /feed/?type=news ` - новости пользователей.
6773- ` GET /feed/?type=project ` - проектные новости и проектные feed-записи.
68- - ` GET /feed/?type=project|news ` - комбинированная выдача по нескольким типам.
74+ - ` GET /feed/?type=vacancy ` - служебные feed-записи вакансий.
75+ - ` GET /feed/?type=project|news|vacancy ` - комбинированная выдача по нескольким
76+ типам.
6977
7078## Ограничения и правила
7179
7280- Feed читает данные из ` news.News ` , но не отвечает за создание обычных
7381 project/user/program news.
7482- Служебная feed-запись определяется через пустой ` text ` .
75- - Signals проектов могут создавать или удалять feed-записи, но тесты этих
76- side effects остаются в модуле ` projects ` .
77- - ` DevScript ` в ` feed/views.py ` остается служебным legacy-инструментом и не
78- является основным пользовательским API.
83+ - Signals ` feed ` создают или удаляют служебные feed-записи для проектов и
84+ вакансий. Более широкие сценарии публикации проекта остаются в модуле
85+ ` projects ` .
7986
8087## Тесты
8188
8289Текущие regression-тесты проверяют:
8390
8491- ` /feed/?type=news ` возвращает пользовательские новости;
8592- ` /feed/?type=project ` возвращает проектные новости в frontend-формате;
93+ - ` /feed/?type=project ` возвращает служебную feed-запись проекта как
94+ ` type_model = "project" ` ;
95+ - ` /feed/?type=vacancy ` возвращает служебную feed-запись вакансии как
96+ ` type_model = "vacancy" ` ;
8697- новости непубличных проектов не попадают в feed;
98+ - новости черновых проектов не попадают в feed;
99+ - liked flag выставляется для новостей, лайкнутых текущим пользователем;
87100- ` get_liked_news() ` возвращает лайкнутые текущим пользователем записи;
88101- ` create_news_for_model() ` создает одну служебную feed-запись без дублей;
89102- ` delete_news_for_model() ` удаляет только служебную feed-запись и не трогает
90- обычную новость с текстом.
103+ обычную новость с текстом;
104+ - signal handlers создают и удаляют служебные feed-записи при изменении проекта
105+ или вакансии.
0 commit comments