Skip to content

API for posts filtered by rating. Posts are aggregated to digests for the user.

License

Notifications You must be signed in to change notification settings

minaton-ru/digest-drf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API приложение для создания дайджестов контента

Приложение формирует дайджесты контента для пользователей на основе их подписок. Дайджест представляет собой выборку постов из различных источников, на которые подписан пользователь.

Функционал

Ендпойнт на запрос GET создает дайджест для пользователя и выдает список постов в формате json.
При создании дайджеста в него войдут только те посты, которые пользователь еще не получал в виде дайджеста (не просматривал).
В запросе можно указать рейтинг постов, в результате в дайджест буду отобраны посты, у которых рейтинге выше либо равен указанному, и которые пользователь еще не просматривал.

Стек

Python
Django
Django Rest Framework
drf-yasg

Пакеты:
django-environ - для хранения переменных окружения в файле .env

Структура данных

  • Модель User: Хранит данные о пользователе, включая ID и имя. Стандартная модель Django.
  • Модель Subscription: Содержит информацию о подписках пользователя, включая ID подписки, название источника и ID пользователя.
  • Модель Post: Включает информацию о постах из подписок, включая ID поста, ID подписки, содержание поста, популярность, информацию о том, что пользователь просмотрел этот пост.
  • Модель Digest: Содержит информацию о сформированном дайджесте, включая ID дайджеста, список постов, ID пользователя, время создания.

Описание API

В проекте есть документация Swagger, доступная после запуска приложения по адресу http://127.0.0.1:8000/api/swagger/

Запрос

GET /api/digest/?userid=value&rating=value вернет созданный дайджест для пользователя.

Параметры:

  • userid - Тип integer. Уникальный id пользователя, для которого будет создан дайджест. Обязательный параметр.
  • rating - Тип integer. Значение рейтинга постов. Для дайджеста будут отобраны посты, имеющие рейтинг выше или равным указанному. Если параметр не указан в запросе, то будут отобраны все посты, имеющие рейтинг выше либо равный 0.

Ответ

Если пользователь найден, ответ приходит с кодом 200 OK и содержит json с уникальным id дайджеста и списком текстов постов:

HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "pk": 29,
    "posts": [
        "Курс доллара на следующей неделе снизится на 1,14 рубля, до 89,78 рубля, евро - на 1,2 рубля, до 100 рублей ровно, курс юаня упадет на 10 копеек, до 12,52 рубля, ожидают опрошенные РИА Новости финансовые эксперты.\r\n\r\nРынок акций, по их прогнозу, за неделю существенно не изменится и останется около уровня 2920 пунктов, а цена на нефть марки Brent вырастет в пределах 1 доллара, до 81,18 доллара за баррель."
    ]
}

Если пользователь не найден, ответ придет с кодом 404 Not Found.

Установка

  1. Скопировать файлы:
$ git clone https://github.com/minaton-ru/digest-drf.git
  1. Создать файл .env для переменных окружения DEBUG и SECRET_KEY. Пример файла:
DEBUG=True
SECRET_KEY=''
  1. Установить зависимости, применить миграции, добавить фикстуры в базу данных:
$ cd digest-drf
$ virtualenv venv
$ source venv/bin/activate
(venv) $ pip install -r requirements.txt
(venv) $ python manage.py migrate
(venv) $ python manage.py loaddata fixture.json
(venv) $ python manage.py runserver
  1. Открыть в браузере URL c Swagger-документацией http://127.0.0.1:8000/api/swagger/, сделать тестовый запрос.
  2. Или перейти на URL http://127.0.0.1:8000/api/digest/?userid=2&rating=8, в ответ получить дайджест из новостей с рейтингом >=8. Если после этого сделать запрос http://127.0.0.1:8000/api/digest/?userid=2&rating=4, то получим дайджест из новостей с рейтингом >=4, но уже без тех новостей, которые получили в предыдущем дайджесте.

Тесты

В файле tests.py находятся тесты.
Для запуска тестов:
python manage.py test

About

API for posts filtered by rating. Posts are aggregated to digests for the user.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages