4.2 KiB
4.2 KiB
Тестовое задание
На хост машине
docker compose build --no-cache
docker compose up -d
docker compose exec php sh
npm run build
Внутри контейнера
php artisan migrate
php artisan db:seed # включая заполнение статей и комментариев
php artisan test # запуск тестов, включая тесты контроллеров
Маршруты в api.php
Route::prefix('articles')->group(function () {
// Список статей
Route::get('/', [ArticleController::class, 'index'])->name('articles.index');
// Просмотр одной статьи
Route::get('/{article}', [ArticleController::class, 'show'])->name('articles.show');
// Создание статьи
Route::post('/', [ArticleController::class, 'store'])->name('articles.store');
// Создание комментария для статьи
Route::post('/{article}/comments', [CommentController::class, 'store'])->name('comments.store');
});
Маршруты в web.php
// Главная страница
Route::get('/', function () {
return Inertia::render('welcome');
})->name('home');
// Просмотр статьи через Inertia
Route::get('/articles/{id}', function ($id) {
return Inertia::render('Articles/Show', [
'articleId' => (int)$id,
]);
});
// Панель управления (только для авторизованных пользователей)
Route::get('dashboard', function () {
return Inertia::render('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');
Запросы
- Получение одной статьи с комментариями
curl -X GET http://localhost:8080/api/articles/45
{
"data": {
"id": 45,
"title": "s",
"content": "s",
"created_at": "2026-02-04",
"comments": [
{
"id": 62,
"author_name": "d",
"content": "d",
"created_at": "2026-02-04 15:51:11"
},
{
"id": 63,
"author_name": "d",
"content": "d",
"created_at": "2026-02-04 15:51:15"
}
]
}
}
- Создание новой статьи
curl -X POST http://localhost:8080/api/articles \
-H "Content-Type: application/json" \
-d '{"title":"Новая статья","content":"Содержание статьи"}'
{
"data": {
"id": 46,
"title": "Новая статья",
"content_short": "Содержание статьи",
"created_at": "2026-02-04",
"comments_count": 0
}
}
- Создание комментария для статьи
curl -X POST http://localhost:8080/api/articles/46/comments \
-H "Content-Type: application/json" \
-d '{"author_name":"Иван","content":"Отличная статья!"}'
{
"data": {
"id": 64,
"author_name": "Иван",
"content": "Отличная статья!",
"created_at": "2026-02-04 16:09:51"
}
}
- Получение списка всех статей
curl -X GET http://localhost:8080/api/articles
{
"data": [
{
"id": 45,
"title": "s",
"content_short": "s",
"created_at": "2026-02-04",
"comments_count": 2
},
{
"id": 44,
"title": "cazxdasd",
"content_short": "asdasdasd",
"created_at": "2026-02-04",
"comments_count": 3
},
{
"id": 39,
"title": "Delectus eaque sunt soluta ut tempora similique necessitatibus.",
"content_short": "Odit id quisquam consequuntur quis. Amet debitis e",
"created_at": "2026-02-04",
"comments_count": 1
},
{
"id": 40,
"title": "Tempore possimus qui ea eaque incidunt.",
"content_short": "Inventore excepturi expedita vitae nihil provident",
"created_at": "2026-02-04",
"comments_count": 3
}
]
}
Комментарий:
Установил базовый пакет laravel для регистрации и тд
Маршруты не защищал
HTTPS не настраивал через certbot
Время, около 3х часов