API для учета и обработки просмотров постов с использованием Laravel и Redis.
- Postman коллекция
- Миграции базы данных
- API Endpoints
- Воркер обработки просмотров
- Установка и настройка
В корне проекта находится файл vc_test.postman_collection.json
, содержащий коллекцию запросов для Postman.
Миграции находятся в директории database/migrations/
:
2025_06_19_000000_create_posts_table.php
- создание таблицы постов2025_06_19_000001_create_post_views_table.php
- создание таблицы просмотров постов- Содержит внешние ключи на таблицы
posts
иusers
- Уникальный составной индекс по полям
post_id
иuser_id
- Содержит внешние ключи на таблицы
Установить миграции и заполнить базу данных можно командой php artisan migrate:fresh --seed
POST /api/auth/token
- Получение токена доступа- Требуемые поля:
email
,password
(по умолчаниюpassword
)
- Требуемые поля:
GET /api/posts
- Получение списка постов с курсорной пагинацией- Query параметры:
per_page
- количество постов на странице (по умолчанию 10)sort_direction
- направление сортировки (asc
/desc
)
- Query параметры:
POST /api/posts/{post}/view
- Отметить пост как просмотренный (сохраняет в Redis для дальнейшей обработки в воркере)
Воркер ProcessPostViews
обрабатывает просмотры постов из Redis и сохраняет их в базу данных.
- Получает все ключи из Redis с шаблоном
post_views:*
- Для каждого ключа извлекает ID пользователя и просмотренные им посты
- Обновляет счетчик просмотров для каждого поста
- Сохраняет записи о просмотрах в базу данных
- Удаляет обработанные ключи из Redis
php artisan posts:process-views
Подразумевается выполнение команды по расписанию через планировщик задач раз в минуту.
-
Установите зависимости:
composer install
-
Создайте файл
.env
и настройте подключение к базе данных и Redis -
Запустить контейнеры sail
sail up -d
-
Выполните миграции в контейнере:
php artisan migrate:fresh --seed
-
Запустите планировщик в контейнере:
php artisan schedule:work
- PHP 8.2+
- Laravel 12.x
- Redis
- PostgreSQL