質問編集履歴

1

関連するコードを全文記載しました

2024/02/02 01:05

投稿

omz
omz

スコア4

test CHANGED
File without changes
test CHANGED
@@ -25,24 +25,174 @@
25
25
 
26
26
  ```Laravel
27
27
  <-- api.php -->
28
+ <?php
29
+
30
+ use Illuminate\Http\Request;
31
+ use Illuminate\Support\Facades\Route;
32
+
33
+ /*
34
+ |--------------------------------------------------------------------------
35
+ | API Routes
36
+ |--------------------------------------------------------------------------
37
+ |
38
+ | Here is where you can register API routes for your application. These
39
+ | routes are loaded by the RouteServiceProvider within a group which
40
+ | is assigned the "api" middleware group. Enjoy building your API!
41
+ |
42
+ */
43
+
44
+ Route::middleware(['auth:sanctum'])->get('/user', function (Request $request) {
45
+ return $request->user();
46
+ });
47
+
48
+ Route::middleware('auth:sanctum')->post('/tokens/create', function (Request $request) {
49
+ $token = $request->user()->createToken($request->token_name);
50
+
51
+ return ['token' => $token->plainTextToken];
52
+ });
53
+
54
+ Route::prefix('v1')->group(function () {
55
+ Route::post('/register', [\App\Http\Controllers\Api\V1\AuthController::class, 'register']);
56
+ Route::post('/login', [\App\Http\Controllers\Api\V1\AuthController::class, 'login']);
57
+ Route::delete('/logout', [\App\Http\Controllers\Api\V1\AuthController::class, 'logout']);
58
+
59
+ Route::prefix('products')->group(function () {
60
+ Route::get('/', [\App\Http\Controllers\Api\V1\ProductsController::class, 'index']);
61
+ Route::get('/{id}', [\App\Http\Controllers\Api\V1\ProductsController::class, 'show']);
62
+ Route::get('/{productId}/reviews', [\App\Http\Controllers\Api\V1\ReviewsController::class, 'index']);
28
- Route::post('/{productId}/reviews', [\App\Http\Controllers\Api\V1\ReviewsController::class, 'store']);
63
+ Route::post('/{productId}/reviews', [\App\Http\Controllers\Api\V1\ReviewsController::class, 'store']);
64
+ });
65
+
66
+ Route::get('/tax_rates', [\App\Http\Controllers\Api\V1\TaxRatesController::class, 'index']);
67
+
68
+ Route::post('/check', [\App\Http\Controllers\Api\V1\AuthController::class, 'check']);
69
+
70
+ Route::group(['middleware' => 'auth:sanctum'], function () {
71
+ Route::prefix('carts')->group(function () {
72
+ Route::get('/', [\App\Http\Controllers\Api\V1\CartsController::class, 'index']);
73
+ Route::post('/', [\App\Http\Controllers\Api\V1\CartsController::class, 'store']);
74
+ Route::patch('/{id}', [\App\Http\Controllers\Api\V1\CartsController::class, 'update']);
75
+ Route::delete('/{id}', [\App\Http\Controllers\Api\V1\CartsController::class, 'delete']);
76
+ });
77
+
78
+ Route::prefix('orders')->group(function () {
79
+ Route::get('/', [\App\Http\Controllers\Api\V1\OrdersController::class, 'index']);
80
+ Route::post('/', [\App\Http\Controllers\Api\V1\OrdersController::class, 'create']);
81
+ });
82
+ });
83
+ });
84
+
29
85
 
30
86
  <-- Controller -->
87
+ <?php
88
+
89
+ namespace App\Http\Controllers\Api\V1;
90
+
91
+ use Illuminate\Http\JsonResponse;
92
+ use Illuminate\Http\Request;
93
+ use App\Interfaces\Services\ReviewServiceInterface;
94
+ use App\Models\Review;
95
+ use App\Services\ReviewService;
96
+ use Illuminate\Support\Facades\Auth;
97
+ use App\Http\Requests\Review\ReviewsRequest;
98
+ use App\Http\Resources\ReviewResource;
99
+ use App\Interfaces\Repositories\ReviewRepositoryInterface;
100
+ use Illuminate\Support\Facades\Log;
101
+
102
+ /**
103
+ * レビュー関連コントローラ
104
+ */
105
+ class ReviewsController extends BaseController
106
+ {
107
+ private ReviewServiceInterface $reviewService;
108
+ private ReviewRepositoryInterface $reviewRepository;
109
+
110
+ public function __construct(ReviewServiceInterface $reviewService, ReviewRepositoryInterface $reviewRepository)
111
+ {
112
+ $this->reviewService = $reviewService;
113
+
114
+ $this->middleware('reviews.request')->only('store');
115
+ }
116
+
117
+ public function index(int $productId): JsonResponse
118
+ {
119
+ Log::info("called index method");
120
+
121
+ $response = $this->reviewService->getReviewByProductId($productId);
122
+ return response()->json($response);
123
+ }
124
+
31
- public function store(ReviewsRequest $request, int $productId)
125
+ public function store(ReviewsRequest $request, int $productId)
32
- {
126
+ {
127
+ Log::info("called store method");
128
+
33
- $reviewData = $request->validatedData();
129
+ $reviewData = $request->all();
34
- $response = $this->reviewService->saveReviewByProductId($reviewData);
130
+ $response = $this->reviewService->saveReviewByProductId($reviewData, $productId);
35
131
 
36
132
  return response()->json($response, 201);
37
133
  }
134
+ }
38
135
 
39
136
  <-- Service -->
137
+ <?php
138
+
139
+ namespace App\Services;
140
+
141
+ use App\Http\Requests\ReviewsRequest;
142
+ use App\Http\Resources\ReviewResource;
143
+ use App\Interfaces\Repositories\ReviewRepositoryInterface;
144
+ use App\Interfaces\Services\ReviewServiceInterface;
145
+
146
+ class ReviewService implements ReviewServiceInterface
147
+ {
148
+ protected ReviewRepositoryInterface $reviewRepository;
149
+
150
+ public function __construct(ReviewRepositoryInterface $reviewRepository)
151
+ {
152
+ $this->reviewRepository = $reviewRepository;
153
+ }
154
+
155
+ public function getReviewByProductId(int $productId)
156
+ {
157
+ return $this->reviewRepository->getReview($productId);
158
+ }
159
+
40
- public function saveReviewByProductId(array $reviewsData, $productId)
160
+ public function saveReviewByProductId(array $reviewsData, int $productId)
41
161
  {
42
162
  return $this->reviewRepository->saveReview($reviewsData, $productId);
43
163
  }
164
+ }
165
+
44
166
 
45
167
  <-- Repository -->
168
+ <?php
169
+
170
+ namespace App\Repositories;
171
+
172
+ use Illuminate\Database\Eloquent\Builder;
173
+
174
+ use App\Interfaces\Repositories\ReviewRepositoryInterface;
175
+ use App\Models\Review;
176
+ use Illuminate\Support\Facades\DB;
177
+
178
+ class ReviewRepository extends BaseRepository implements ReviewRepositoryInterface
179
+ {
180
+ protected Review $review;
181
+
182
+ public function __construct(Review $review)
183
+ {
184
+ $this->review = $review;
185
+ }
186
+
187
+ public function all(string $column = 'created_at', string $direction = 'asc'): Builder
188
+ {
189
+ return $this->review::orderBy($column, $direction);
190
+ }
191
+ public function getReview(int $productId)
192
+ {
193
+ return $this->review::where('product_id', $productId)->get();
194
+ }
195
+
46
196
  public function saveReview(array $reviewData, int $productId): Review
47
197
  {
48
198
  return DB::transaction(function () use ($reviewData, $productId) {
@@ -54,6 +204,8 @@
54
204
  }
55
205
  });
56
206
  }
207
+ }
208
+
57
209
  ```
58
210
 
59
211
  ### 試したこと・調べたこと