Цель: Разработать простое веб-приложение — каталог товаров с административной панелью для их управления.
- Бэкенд: Laravel 10+ (RESTful API)
- Фронтенд: Vue.js 3 (Composition API) + InertiaJS — обязательно. Можно использовать
- UI-библиотеку (например, Element Plus, PrimeVue, или просто Tailwind CSS).
- База данных: PostgreSQL.
- Модели и Миграции:
- Product (Товар): id, name, description, price, category_id, created_at, updated_at.
- Category (Категория): id, name, description, created_at, updated_at.
- Связь: Один товар принадлежит одной категории (belongsTo). Одна категория имеет много товаров (hasMany).
- API Эндпоинты (с использованием Resource-контроллеров и Form Request Validation):
- Товары (Products):
■ GET /api/products — список всех товаров с пагинацией (по 10-15 штук). Должен включать информацию о категории.
■ GET /api/products/{id} — просмотр одного товара.
■ POST /api/products — создание товара (требуется аутентификация).
■ PUT/PATCH /api/products/{id} — обновление товара (требуется аутентификация).
■ DELETE /api/products/{id} — удаление товара (требуется аутентификация).- Категории (Categories):
■ GET /api/categories — список всех категорий (без пагинации, для выпадающего списка).
- Аутентификация (Sanctum):
- Реализовать простую аутентификацию по токену для административных действий (создание, редактирование, удаление).
- Достаточно одного предустановленного пользователя (логин/пароль) или эндпоинта POST /api/login, который возвращает токен.
- Эндпоинты на чтение (GET) должны быть публичными.
- Валидация:
- При создании/обновлении товара проверять: name (обязательно, строка), price (обязательно, число, больше 0), category_id (существует в таблице категорий).
-
Публичная часть (без аутентификации):
- Главная страница (/): Список товаров с пагинацией. Для каждого товара отображать: название, категорию, цену, краткое описание.
- Карточка товара (/product/{id}): Подробная информация о товаре.
- Фильтрация: На странице списка товаров добавить выпадающий список для фильтрации по категории. При выборе категории — AJAX-запрос за отфильтрованными товарами.
-
Административная часть (требуется аутентификация):
- Логин: Простая страница ввода логина/пароля. Токен сохранять в локальном хранилище. После входа появляется меню с пунктами "Управление товарами" и "Выйти".
- Список товаров для администратора (/admin/products): Похож на публичный список, но в каждой строке есть кнопки "Редактировать" и "Удалить", а также кнопка "Добавить товар".
- Форма создания/редактирования товара (/admin/products/create, /admin/products/{id}/edit): ■ Поля:
Название (input),
Категория (select, загружается из GET /api/categories),
Описание (textarea),
Цена (input type number).■ Валидация на фронтенде (можно простую, required, min для цены).
■ Отправка данных на соответствующий API эндпоинт.
■ После успешного сохранения — редирект на список товаров администратора.
- Общее:
- Работоспособность всего функционала.
- Чистота и структура кода, именование переменных и функций.
- Умение работать с Git (история коммитов должна быть внятной, а не один огромный коммит "finish").
- Бэкенд (Laravel):
- Использование возможностей Eloquent (отношения, with для eager loading).
- Корректное разделение логики: контроллеры, модели, Form Request.
- Правильные HTTP-коды ответов.
- Использование Resource/Collection для формирования ответа API.
- Фронтенд (Vue.js):
- Корректное использование Composition API (ref, reactive, computed, watch).
- Работа с состоянием для хранения токена авторизации и, возможно, состояния загрузки/ошибок.
- Обработка ошибок API (например, если товар не найден, или нет доступа).
- Бонусные задачи (не обязательно, но будет большим плюсом):
- Использование docker и docker compose для запуска проекта.
- Добавить мягкое удаление (Soft Deletes) для товаров.
- Добавить сидеры (Seeders) для наполнения базы тестовыми товарами и категориями.
- Написать базовые тесты (например, для API создания товара).
- Использование композаблов (composables) для выноса логики работы с API (например, useProductApi, useAuth).
- Реализация красивого и отзывчивого UI с использованием какой-либо библиотеки компонентов.
- Добавление подтверждения (модального окна) перед удалением товара.
- Дебаунс для поля поиска (если добавить поиск).
Готовое приложение выложить на GitHub / Bitbucket
- .env
- make up
php artisan migrate || php artisan db:seeder
или
make db-restore