Тестовое задание
Порядок действий для развертывания проекта
- Клонировать репозиторий
git clone git@github.com:xenon-96-31-10/test-assignment.git
- Настроить соединение с БД на локальном сервере (или где удобно)
- Создать БД (test_assignment или свое название)
- Указать данные для БД в файле
.env
- Через терминал в корневой папке проекта запустить следующие команды
composer install
npm i && npm run dev
php artisan key:generate
php artisan migration
php artisan route:cache
-
php artisan serve
- если Вы используете LAMP|XAMP и аналоги, но лучше поставить Laravel Homestead (даже для обычных проектов он крут и дает много плюсов) npm run watch || npm run watch-poll
Если возникают ошибки, то скорее всего они уже описаны в интернете :)
- Убедитесь что у Вас есть composer
- Добавьте оператор php для работы с ним в командной строке
- Установить NODE.JS для работы с npm
Суть тестового задания
Мы для Вас заготовили тестовую структуру БД:
Post (title - varchar 255, description - text) & Comment(name - varchar, text - text, post_id - int)
У каждого поста может быть несколько комментариев
Вам нужно будет создать компоненты создания, отображение постов, отображение отдельного поста с комментариями
Для Вас уже будут заготовлены все методы API и созданы контроллеры ( Вам только отправить туда с формы нужно будет данные и отобразить)
Все компоненты будут созданы и маршруты прописаны - обязательно изучите структуру, так как ее нужно будет объяснить почему у нас так
Для запросов через аксиос смотрите в routes/api.php - если забыли маршруты
Бэкенд настроен для Вас - с Вас только vue
Ваши задачи
- Отображение всех постов с пагинацией (
/resources/js/views/posts/Posts.vue
) и возможностью открыть отдельный пост- Для получения данных используйте
Axios
методом post по адресу/api/posts
- Для получения данных используйте
- Создать компонент создания поста CreatePost.vue - сохраните в
/resources/js/components
- Создайте в нем форму (title, description)
- Через
Axios
методом post отправить эти данные на адрес/api/*/create
( * - post или comment) - остальное сделает обработчик и сохранит пост - Встройте этот компонент в страницу посты и сделайте через прослушиватель vue обновление списка постов
- Доработать компонент отображения поста
- Комментарии можно оформить в виде карточек с простой пагинацей
- Добавить возможность создавать комментарии CreateComment.vue (также сохраните в компоненты аналогично п.2 и используйте на странице c отдельным постом)
- В формы встроить vuelidate или использовать ответ валидации laravel в axios.catch (поймать сообщение с ошибками и красиво отобразить)
- Не обязательно, но приветствуется - редактирование поста
- Данные отправлять на
/api/post
параметры (вместе с id)
- Данные отправлять на
Важно:
- Vue компоненты (components - для переиспользования) и представления страниц spa (views) располагаются в
/resources/js
- Там же router.js и app.js (подключать npm пакеты - для валидации)
- Уже созданы для SPA страница главная и посты, а также создан маршрут
/posts/:id/show
- для показа
Примеры кода
Ссылка для работы с роутерами с передачей параметра как props (по id внутри делать запрос к серверу через axios и передавать id)
<router-link
:to="{ name: 'Post', params: { id: item.id }}">
Открыть
</router-link>