# 残りのバックエンド実装
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
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
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