Files
cpo_test/laravel/app/Http/Controllers/Api/V1/TaskController.php
2026-02-06 23:26:56 +07:00

85 lines
2.0 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Controllers\Api\V1;
use App\Events\TaskCreated;
use App\Http\Controllers\Controller;
use App\Http\Requests\StoreTaskRequest;
use App\Http\Requests\UpdateTaskRequest;
use App\Http\Resources\TaskResource;
use App\Http\Resources\TaskResourceCollection;
use App\Models\Task;
use Auth;
use Symfony\Component\HttpFoundation\Response;
final class TaskController extends Controller
{
public function __construct()
{
$this->authorizeResource(Task::class, 'task');
}
/**
* Display a listing of the resource.
*/
public function index(): TaskResourceCollection
{
$tasks = request()->user()
->tasks()
->latest()
->paginate(10);
return new TaskResourceCollection($tasks);
}
/**
* Store a newly created resource in storage.
*/
public function store(StoreTaskRequest $request)
{
$task = Auth::user()->tasks()->create($request->validated());
event(new TaskCreated($task)); // вынести бы из контроллера
return new TaskResource($task)
->response()
->setStatusCode(Response::HTTP_CREATED)
->header('Location', route('tasks.show', $task));
}
/**
* Display the specified resource.
*/
public function show(Task $task): TaskResource
{
return new TaskResource($task);
}
/**
* Update the specified resource in storage.
*/
public function update(UpdateTaskRequest $request, Task $task): TaskResource
{
$task->update($request->validated());
if ($task->status->isCompleted()) {
$task->notified_at = null;
$task->save();
}
return new TaskResource($task);
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Task $task)
{
$task->delete();
return response()->noContent();
}
}