Skip to content

ReWiG/vc_test

Repository files navigation

API для учета просмотров постов

О проекте

API для учета и обработки просмотров постов с использованием Laravel и Redis.

Содержание

Postman коллекция

В корне проекта находится файл 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

API Endpoints

Аутентификация

  • POST /api/auth/token - Получение токена доступа
    • Требуемые поля: email, password (по умолчанию password)

Посты (требуется Bearer токен)

  • GET /api/posts - Получение списка постов с курсорной пагинацией
    • Query параметры:
      • per_page - количество постов на странице (по умолчанию 10)
      • sort_direction - направление сортировки (asc/desc)
  • POST /api/posts/{post}/view - Отметить пост как просмотренный (сохраняет в Redis для дальнейшей обработки в воркере)

Воркер обработки просмотров

Воркер ProcessPostViews обрабатывает просмотры постов из Redis и сохраняет их в базу данных.

Как работает:

  1. Получает все ключи из Redis с шаблоном post_views:*
  2. Для каждого ключа извлекает ID пользователя и просмотренные им посты
  3. Обновляет счетчик просмотров для каждого поста
  4. Сохраняет записи о просмотрах в базу данных
  5. Удаляет обработанные ключи из Redis

Запуск воркера:

php artisan posts:process-views

Подразумевается выполнение команды по расписанию через планировщик задач раз в минуту.

Установка и настройка

  1. Установите зависимости:

    composer install
  2. Создайте файл .env и настройте подключение к базе данных и Redis

  3. Запустить контейнеры sail

    sail up -d
  4. Выполните миграции в контейнере:

    php artisan migrate:fresh --seed
  5. Запустите планировщик в контейнере:

    php artisan schedule:work

Технический стек

  • PHP 8.2+
  • Laravel 12.x
  • Redis
  • PostgreSQL

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages