Skip to content

Commit 50b549a

Browse files
committed
feat: update review submission logic to use order_item_id and enhance validation
1 parent d67414c commit 50b549a

File tree

2 files changed

+41
-21
lines changed

2 files changed

+41
-21
lines changed

app/Http/Controllers/reviewController.php

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,53 +2,55 @@
22

33
namespace App\Http\Controllers;
44

5+
use App\Models\orderItem;
56
use App\Models\Review;
67
use App\Models\transaction;
78
use Illuminate\Http\Request;
89
use Illuminate\Support\Facades\Auth;
910

1011
class reviewController extends Controller
1112
{
12-
public function storeReview(Request $request){
13+
public function store(Request $request)
14+
{
1315
$request->validate([
14-
'transaction_id' => 'required|exists:transactions,id',
15-
'product_id' => 'required|exists:order_items,product_id',
16+
'order_item_id' => 'required|exists:order_items,id',
1617
'rating' => 'required|integer|min:1|max:5',
1718
'comment' => 'nullable|string|max:500',
1819
]);
1920

20-
$trasaction = transaction::where('id', $request->transaction_id)
21-
->where('user_id', Auth::id())
22-
->whereNotNull('confirmed_received_at')
23-
->firstOrFail();
21+
$user = Auth::user();
2422

25-
if(!$trasaction){
23+
$orderItem = orderItem::with('transaction')->findOrFail($request->order_item_id);
24+
25+
if($orderItem->transaction->user_id !== $user->id) {
2626
return response()->json([
27-
'message' => 'Transaction not found or you are not authorized to review this transaction or transaction not confirmed received',
28-
], 404);
27+
'message' => 'You are not authorized to review this order item',
28+
], 403);
2929
}
3030

31-
$alreadyReviewed = Review::where('transaction_id', $trasaction->id)
32-
->where('product_id', $request->product_id)
33-
->where('user_id', Auth::id())
34-
->exists();
31+
if($orderItem->transaction->shipping_status !== 'completed') {
32+
return response()->json([
33+
'message' => 'You can only review completed transactions',
34+
], 400);
35+
}
3536

36-
if ($alreadyReviewed) {
37+
if($orderItem->review) {
3738
return response()->json([
38-
'message' => 'You have already reviewed this product',
39+
'message' => 'You have already reviewed this order item',
3940
], 400);
4041
}
4142

42-
Review::create([
43-
'transaction_id' => $trasaction->id,
44-
'product_id' => $request->product_id,
45-
'user_id' => Auth::id(),
43+
$review = Review::create([
44+
'user_id' => $user->id,
45+
'product_id' => $orderItem->product_id,
46+
'order_item_id' => $orderItem->id,
4647
'rating' => $request->rating,
4748
'comment' => $request->comment,
4849
]);
4950

5051
return response()->json([
51-
'message' => 'Review submitted successfully',
52+
'message' => 'Review created successfully',
53+
'review' => $review,
5254
], 201);
5355
}
5456

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Support\Facades\DB;
5+
6+
class AlterStatusEnumOnTransactionsTable extends Migration
7+
{
8+
public function up()
9+
{
10+
DB::statement("ALTER TABLE transactions MODIFY status ENUM('pending', 'paid', 'cancelled', 'expired', 'completed') DEFAULT 'pending'");
11+
}
12+
13+
public function down()
14+
{
15+
// Balik ke enum sebelumnya (jika perlu rollback)
16+
DB::statement("ALTER TABLE transactions MODIFY status ENUM('pending', 'paid', 'cancelled', 'expired') DEFAULT 'pending'");
17+
}
18+
}

0 commit comments

Comments
 (0)