新しくルートを設定します。
routes/api.php
// protected routes
Route::group(['middleware' => ['auth:sanctum']], function () {
Route::resource('/tasks', TasksController::class);
Route::post('/logout', [AutoController::class, 'logout']);
});
タスクのDBを作ります。
ユーザーとタスクは1対多です。
必要なファイルを作成
//リソースコントローラー
php artisan make:controller TasksController -r
//モデルとマイグレーションファイル
php artisan make:model Task -m
//リクエストファイル
php artisan make:request StoreTaskRequest
//リソースファイル
php artisan make:resource TaskResource
マイグレーションを編集
migrations/2023_04_16_132901_create_tasks_table.php
public function up(): void
{
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->string('name');
$table->string('description');
$table->string('priority')->default('medium');
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
$table->timestamps();
});
}
モデルを編集
Models/Task.php
class Task extends Model
{
use HasFactory;
protected $fillable = [
'name',
'description',
'priority',
'user_id'
];
public function user()
{
return $this->belongsTo(User::class);
}
}
データベースを作成
php artisan migrate
ここでseederとかfactoryとかphpmyadminとかで
taskをいくつか作っておきます。
リソースを編集
Resource/TaskResource.php
public function toArray(Request $request): array
{
return [
'id' => (string)$this->id,
'attributes' => [
'name' => $this->name,
'description' => $this->description,
'priority' => $this->priority,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
],
'relationships' => [
'id' => (string)$this->user->id,
'user name' => $this->user->name,
'user email' => $this->user->email,
],
];
}
コントローラーを編集
TasksController.php
use App\Http\Resources\TaskResource;
use Illuminate\Support\Facades\Auth;
略
public function index()
{
return TaskResource::collection(
Task::where('user_id', Auth::user()->id)->get()
);
}
ここでpostmanでタスクを取得してみる。
urlはhttp://localhost/api/tasks
メソッドはget
Headersの設定に以下を追加
(key) Accept (value) application/vnd.api+json
(key) Content-Type (value) application/vnd.api+json
Authorizationに以下を追加
(type) Bearer Token (token) さっき返ってきてたトークン
これでデータが取れたらOK。
次に
タスクリソースのstoreメソッドも作っていく。
StoreTaskRequest.php
class StoreTaskRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'name' => 'required|max:255',
'description' => 'required',
'priority' => 'required'
];
}
}
TasksController.php
use App\Http\Requests\StoreTaskRequest;
略
public function store(StoreTaskRequest $request)
{
$request->validated($request->all());
$task = Task::create([
'user_id' => Auth::user()->id,
'name' => $request->name,
'description' => $request->description,
'priority' => $request->priority,
]);
return new TaskResource($task);
}
ここでpostmanでタスクを作成してみる。
問題なければ他のメソッドも作っていく。
最後にログアウトの処理を作る。
AutoController.php
public function logout()
{
Auth::user()->currentAccessToken()->delete();
return response()->json([
'status' => 'success',
'message' => 'Logged out'
],200);
}