# 残りのバックエンド実装

API 側 (バックエンド側) の機能を完成させます。

# TodoItemController

既存の関数(index, store, show, update, destroy)については関数内に記述し、done()undone() については、新しく関数を記述してください。 また、show, update, destroy 関数に関しては、引数を追加で受け取るようにしているため、修正し忘れにご注意ください。一部コメントも変えています。 ※ 入れ子構造に注意して記述してください。

~~/app/Http/Controllers/TodoItemController.php












 










 


















 




 

 
 
 



 





 

 
 
 
 
 
 
 
 



 




 

 
 


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


<?php

namespace App\Http\Controllers;

use App\Models\TodoItem;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class TodoItemController extends Controller
{
    /**
     * [GET|HEAD] Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $todoItems = TodoItem::where('user_id', Auth::user()->id)->orderBy('created_at', 'desc')->get();
        return $todoItems;
    }

    /**
     * [POST] Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
            'item-contents' => 'required|max:100',
        ]);
        TodoItem::create([
            'user_id' => Auth::user()->id,
            'title' => $request->input('item-contents'),
            'is_done' => false,
        ]);
        return array('success' => true);
    }

    /**
     * [GET|HEAD] Display the specified resource.
     *
     * @param  \App\Models\TodoItem  $todoItem
     * @return \Illuminate\Http\Response
     */
    public function show(TodoItem $todoItem, $id)
    {
        $item = TodoItem::where('id', $id)->where('user_id', Auth::user()->id)->first();
        if (!$item) return abort(404);
        return $item;
    }

    /**
     * [PUT|PATCH] Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\TodoItem  $todoItem
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, TodoItem $todoItem, $id)
    {
        $item = TodoItem::where('id', $id)->where('user_id', Auth::user()->id)->first();
        if (!$item) return abort(403);
        $request->validate([
            'item-contents' => 'required|max:100',
        ]);
        $item->title = $request->input('item-contents');
        $item->save();
        return array('success' => true);
    }

    /**
     * [DELETE] Remove the specified resource from storage.
     *
     * @param  \App\Models\TodoItem  $todoItem
     * @return \Illuminate\Http\Response
     */
    public function destroy(TodoItem $todoItem, $id)
    {
        TodoItem::where('id', $id)->where('user_id', Auth::user()->id)->delete();
        return array('success' => true);
    }

    /**
     * [PATCH] Update the specified resource in storage.
     *
     * @param int $id
     * @return \Illuminate\Http\Response
     */
    public function done(Request $request, $id)
    {
        $item = TodoItem::where('id', $id)->where('user_id', Auth::user()->id)->first();
        $item->is_done = true;
        $item->save();
        return array('success' => true);
    }

    /**
     * [PATCH] Update the specified resource in storage.
     *
     * @param int $id
     * @return \Illuminate\Http\Response
     */
    public function undone(Request $request, $id)
    {
        $item = TodoItem::where('id', $id)->where('user_id', Auth::user()->id)->first();
        $item->is_done = false;
        $item->save();
        return array('success' => true);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112

# API Router

上記で追加した 2 つの関数について、追加のルーティングとして、2 行追記します。

~~/routes/api.php
































 
 


<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TodoItemController;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});


Route::group(['middleware' => ['auth:sanctum']], function () {
    Route::resource('todos', TodoItemController::class, ['only' => [
        'index',
        'store',
        'show',
        'edit',
        'update',
        'destroy',
    ]]);
    Route::patch('todos/{todo}/done', [TodoItemController::class, 'done']);
    Route::patch('todos/{todo}/undone', [TodoItemController::class, 'undone']);
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34