Skip to content

541d3v/comment-to-content

Repository files navigation

Comment to Content API

Описание

Проект реализует REST API для управления новостями, видеопостами и древовидными комментариями. Решение предназначено для демонстрации работы с полиморфными связями Laravel, курсорной пагинацией и CRUD-операциями для вложенных комментариев.

Основные возможности

  • CRUD для сущностей «Новость» и «Видео пост».
  • Добавление, просмотр, редактирование и удаление комментариев к контенту.
  • Ответы на комментарии любой глубины с сохранением иерархии.
  • Курсорная пагинация комментариев при чтении новости или видеопоста.
  • Ресурсные классы (NewsResource, VideoPostResource, CommentResource) для единообразного формата ответов.

Технологический стек

  • PHP ^8.2
  • Laravel ^12.0
  • MySQL 8+ или SQLite (по умолчанию в локальной среде)
  • Composer, npm, Vite (для сборки фронта при необходимости)

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

Сущность Основные поля Особенности
news title, description Полиморфная связь с комментариями
video_posts title, description Полиморфная связь с комментариями
comments body, user_id, commentable_*, parent_id Поддержка вложенности, отношение к пользователю
users name, email, password Используются для авторства комментариев

Модель Comment использует полиморфную связь commentable для привязки к новости или видеопосту и рекурсивные связи parent/children для вложенных ответов.

Требования к окружению

  • PHP ^8.2 с расширениями pdo, mbstring, openssl, curl, json.
  • Composer ^2.6
  • Node.js ^18 и npm (для запуска фронтенд-скриптов, если потребуется).
  • MySQL 8+ или SQLite. В репозитории подготовлена база database/database.sqlite для быстрого старта.

Установка и запуск

  1. Установите зависимости PHP:
    composer install
  2. Создайте файл окружения (если отсутствует):
    cp .env.example .env
  3. Настройте подключение к БД в .env. Для SQLite достаточно раскомментировать DB_CONNECTION=sqlite и убедиться, что файл database/database.sqlite существует. Для MySQL заполните DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD.
  4. Сгенерируйте ключ приложения:
    php artisan key:generate
  5. Выполните миграции (и при необходимости сидеры):
    php artisan migrate
    php artisan db:seed
  6. (Опционально) Установите фронтенд-зависимости и соберите ассеты:
    npm install
    npm run build # или npm run dev
  7. Запустите сервер разработки:
    php artisan serve

API будет доступно по адресу http://127.0.0.1:8000/api.

Для удобства предусмотрен скрипт быстрого запуска:

composer run setup

Основные маршруты API

Все маршруты расположены в routes/api.php и защищены префиксом /api.

Новости /api/news

  • GET /api/news — список новостей с пагинацией и поиском по title через ?search=....
  • POST /api/news — создание новости.
  • GET /api/news/{id} — получение новости и её комментариев (курсорная пагинация).
  • PUT/PATCH /api/news/{id} — обновление.
  • DELETE /api/news/{id} — удаление.
  • POST /api/news/{id}/comments — добавление комментария к новости.

Пример ответа GET /api/news/{id}:

{
  "data": {
    "id": 1,
    "title": "Новость",
    "description": "Описание",
    "created_at": "2025-01-13T12:00:00+00:00",
    "updated_at": "2025-01-13T12:00:00+00:00"
  },
  "comments": {
    "data": [/* массив CommentResource */],
    "meta": {
      "next_cursor": null,
      "prev_cursor": null,
      "per_page": 10,
      "path": "http://127.0.0.1:8000/api/news/1"
    }
  }
}

Видеопосты /api/video-posts

  • GET /api/video-posts
  • POST /api/video-posts
  • GET /api/video-posts/{id}
  • PUT/PATCH /api/video-posts/{id}
  • DELETE /api/video-posts/{id}
  • POST /api/video-posts/{id}/comments

Ответы идентичны структуре новостей, но используют VideoPostResource.

Комментарии /api/comments

  • GET /api/comments/{id} — получить комментарий с поддеревом.
  • POST /api/comments/{id}/replies — создать ответ на комментарий.
  • PUT/PATCH /api/comments/{id} — обновить тело комментария.
  • DELETE /api/comments/{id} — удалить комментарий (каскад удаления потомков обеспечивается БД).

Схема запроса для комментариев

{
  "body": "Текст комментария",
  "user_id": 1
}

Тестирование

php artisan test

Для очистки конфигурации и кэша перед прогоном тестов используется сценарий composer test.

Полезные команды

Команда Назначение
php artisan migrate:fresh --seed Полностью пересоздать базу данных
php artisan queue:listen Запуск воркера очередей (если потребуется в будущем)
composer run dev Параллельный запуск сервера, очереди, логов и Vite

About

Comment to Content API

Topics

Resources

Stars

Watchers

Forks

Languages