Skip to content

Commit a154fd7

Browse files
committed
worked on the Roll-based API
1 parent 803ea5f commit a154fd7

34 files changed

+816
-195
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\API\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
use Illuminate\Http\Request;
7+
use Illuminate\Http\JsonResponse;
8+
use Illuminate\Support\Facades\Validator;
9+
use App\Models\Product;
10+
11+
class ManageProductAPIController extends Controller
12+
{
13+
/**
14+
* Display a listing of products.
15+
*
16+
* @return JsonResponse
17+
*/
18+
public function index(): JsonResponse
19+
{
20+
$products = Product::latest();
21+
return response()->json([
22+
'success' => true,
23+
'data' => $products
24+
], 200);
25+
}
26+
27+
/**
28+
* Store a newly created product.
29+
*
30+
* @param Request $request
31+
* @return JsonResponse
32+
*/
33+
public function store(Request $request): JsonResponse
34+
{
35+
$validator = Validator::make($request->all(), [
36+
'title' => 'required|string',
37+
'description' => 'required|string',
38+
]);
39+
40+
if ($validator->fails()) {
41+
return response()->json(['error' => $validator->errors()], 422);
42+
}
43+
44+
$product = Product::create($request->all());
45+
46+
return response()->json([
47+
'success' => true,
48+
'message' => 'Product created successfully!',
49+
'data' => $product
50+
], 201);
51+
}
52+
53+
/**
54+
* Update the specified product.
55+
*
56+
* @param Request $request
57+
* @param Product $product
58+
* @return JsonResponse
59+
*/
60+
public function update(Request $request, Product $product): JsonResponse
61+
{
62+
$validator = Validator::make($request->all(), [
63+
'title' => 'required',
64+
'description' => 'required'
65+
]);
66+
67+
if ($validator->fails()) {
68+
return response()->json(['error' => $validator->errors()], 422);
69+
}
70+
71+
Product::where('id', $product->id)->update([
72+
'title' => $request->title,
73+
'description' => $request->description,
74+
]);
75+
76+
dd($product->update());
77+
78+
return response()->json([
79+
'success' => true,
80+
'message' => 'Product updated successfully!',
81+
], 200);
82+
}
83+
84+
/**
85+
* Remove the specified product.
86+
*
87+
* @param Product $product
88+
* @return JsonResponse
89+
*/
90+
public function destroy(Product $product): JsonResponse
91+
{
92+
$product->delete();
93+
94+
return response()->json([
95+
'success' => true,
96+
'message' => 'Product deleted successfully!'
97+
], 200);
98+
}
99+
}

app/Http/Controllers/API/Auth/AuthController.php

+39-14
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,19 @@
88
use Illuminate\Support\Facades\Hash;
99
use App\Models\User;
1010
use Illuminate\Http\Response;
11+
use Spatie\Permission\Models\Role;
1112

1213
class AuthController extends Controller
1314
{
15+
/**
16+
* Register a new user.
17+
*/
1418
public function register(Request $request)
1519
{
1620
$request->validate([
1721
'name' => ['required', 'string', 'max:255'],
18-
'email' => ['required', 'string', 'max:255', 'unique:users'],
19-
'password' => ['required', 'confirmed', 'min:8']
22+
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
23+
'password' => ['required', 'confirmed', 'min:8']
2024
]);
2125

2226
$user = User::create([
@@ -27,32 +31,53 @@ public function register(Request $request)
2731

2832
event(new Registered($user));
2933

30-
// $device = substr($request->userAgent() ?? '', 0, 255);
34+
// Assign default role if not specified
35+
$defaultRole = Role::where('name', 'user')->first();
36+
if ($defaultRole) {
37+
$user->assignRole($defaultRole);
38+
}
3139

3240
return response()->json([
33-
// 'access_token' => $user->createToken($device)->plainTextToken,
34-
'message' => 'Registration successful!'
41+
'message' => 'Registration successful!',
42+
'role' => $defaultRole ? $defaultRole->name : 'No role assigned'
3543
], 201);
3644
}
3745

3846
public function login(Request $request)
3947
{
48+
$request->validate([
49+
'email' => ['required', 'email'],
50+
'password' => ['required']
51+
]);
52+
4053
$user = User::where('email', $request->email)->first();
4154

42-
if(!$user || !Hash::check($request->password, $user->password))
43-
{
44-
return response([
45-
'message' => ['These credentials do not match with our records.']
46-
]);
55+
if (!$user || !Hash::check($request->password, $user->password)) {
56+
return response()->json([
57+
'message' => 'These credentials do not match our records.'
58+
], 401);
59+
}
60+
61+
// Check if user has at least one role assigned
62+
if ($user->roles->isEmpty()) {
63+
return response()->json([
64+
'message' => 'User has no assigned role.'
65+
], 403);
4766
}
4867

49-
$token = substr($request->userAgent() ?? '', 0, 255);
50-
$access_token = $user->CreateToken($token)->plainTextToken;
68+
// Generate access token
69+
$device = substr($request->userAgent() ?? '', 0, 255);
70+
$access_token = $user->createToken($device)->plainTextToken;
5171

5272
return response()->json([
53-
'user' => $user,
73+
'user' => [
74+
'id' => $user->id,
75+
'name' => $user->name,
76+
'email' => $user->email,
77+
'role' => $user->roles->pluck('name')->first()
78+
],
5479
'access_token' => $access_token,
55-
'message' => 'Login Successfully!'
80+
'message' => 'Login successful!'
5681
]);
5782
}
5883
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\API;
4+
5+
use App\Models\Product;
6+
use App\Http\Controllers\Controller;
7+
use Illuminate\Http\Request;
8+
use Illuminate\Http\JsonResponse;
9+
use Illuminate\Support\Facades\Validator;
10+
11+
class apiProductController extends Controller
12+
{
13+
public function __construct()
14+
{
15+
$this->middleware('auth:sanctum');
16+
$this->middleware('permission:product-list|product-create|product-edit|product-delete', ['only' => ['index', 'show']]);
17+
$this->middleware('permission:product-create', ['only' => ['store']]);
18+
$this->middleware('permission:product-edit', ['only' => ['update']]);
19+
$this->middleware('permission:product-delete', ['only' => ['destroy']]);
20+
}
21+
22+
/**
23+
* Display a listing of products.
24+
*
25+
* @return JsonResponse
26+
*/
27+
public function index(): JsonResponse
28+
{
29+
$products = Product::latest()->paginate(5);
30+
return response()->json([
31+
'success' => true,
32+
'data' => $products
33+
], 200);
34+
}
35+
36+
37+
38+
/**
39+
* Display the specified product.
40+
*
41+
* @param Product $product
42+
* @return JsonResponse
43+
*/
44+
public function show(Product $product): JsonResponse
45+
{
46+
return response()->json([
47+
'success' => true,
48+
'data' => $product
49+
], 200);
50+
}
51+
52+
/**
53+
* Update the specified product.
54+
*
55+
* @param Request $request
56+
* @param Product $product
57+
* @return JsonResponse
58+
*/
59+
public function update(Request $request, Product $product): JsonResponse
60+
{
61+
$validator = Validator::make($request->all(), [
62+
'title' => 'required|string|max:255',
63+
'description' => 'required|string'
64+
]);
65+
66+
if ($validator->fails()) {
67+
return response()->json(['error' => $validator->errors()], 422);
68+
}
69+
70+
$product->update($request->all());
71+
72+
return response()->json([
73+
'success' => true,
74+
'message' => 'Product updated successfully!',
75+
'data' => $product
76+
], 200);
77+
}
78+
79+
/**
80+
* Remove the specified product.
81+
*
82+
* @param Product $product
83+
* @return JsonResponse
84+
*/
85+
public function destroy(Product $product): JsonResponse
86+
{
87+
$product->delete();
88+
89+
return response()->json([
90+
'success' => true,
91+
'message' => 'Product deleted successfully!'
92+
], 200);
93+
}
94+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
use Illuminate\Http\Request;
7+
8+
class AdminController extends Controller
9+
{
10+
public function index()
11+
{
12+
return view('admin.dashboard');
13+
}
14+
}

app/Http/Controllers/API/ProductController.php renamed to app/Http/Controllers/Admin/ProductController.php

+9-22
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace App\Http\Controllers\API;
3+
namespace App\Http\Controllers\Admin;
44

55
use App\Models\Product;
66
use App\Http\Controllers\Controller;
@@ -10,19 +10,6 @@
1010

1111
class ProductController extends Controller
1212
{
13-
/**
14-
* Display a listing of the resource.
15-
*
16-
* @return \Illuminate\Http\Response
17-
*/
18-
19-
function __construct()
20-
{
21-
$this->middleware('permission:product-list|product-create|product-edit|product-delete', ['only' => ['index', 'show']]);
22-
$this->middleware('permission:product-create', ['only' => ['create', 'store']]);
23-
$this->middleware('permission:product-edit', ['only' => ['edit', 'update']]);
24-
$this->middleware('permission:product-delete', ['only' => ['destroy']]);
25-
}
2613

2714
/**
2815
* Display a listing of the resource.
@@ -33,7 +20,7 @@ function __construct()
3320
public function index(): View
3421
{
3522
$products = Product::latest()->paginate(5);
36-
return view('products.index', compact('products'))
23+
return view('admin.products.index', compact('products'))
3724
->with('i', (request()->input('page', 1) - 1) * 5);
3825
}
3926

@@ -45,7 +32,7 @@ public function index(): View
4532

4633
public function create(): View
4734
{
48-
return view('products.create');
35+
return view('admin.products.create');
4936
}
5037

5138
/**
@@ -58,8 +45,8 @@ public function create(): View
5845
public function store(Request $request): RedirectResponse
5946
{
6047
request()->validate([
61-
'name' => 'required',
62-
'detail' => 'required',
48+
'title' => 'required',
49+
'description' => 'required',
6350
]);
6451

6552
Product::create($request->all());
@@ -75,7 +62,7 @@ public function store(Request $request): RedirectResponse
7562

7663
public function show(Product $product): View
7764
{
78-
return view('products.show', compact('product'));
65+
return view('admin.products.show', compact('product'));
7966
}
8067

8168
/**
@@ -87,7 +74,7 @@ public function show(Product $product): View
8774

8875
public function edit(Product $product): View
8976
{
90-
return view('products.edit', compact('product'));
77+
return view('admin.products.edit', compact('product'));
9178
}
9279

9380
/**
@@ -101,8 +88,8 @@ public function edit(Product $product): View
10188
public function update(Request $request, Product $product): RedirectResponse
10289
{
10390
request()->validate([
104-
'name' => 'required',
105-
'detail' => 'required',
91+
'title' => 'required',
92+
'description' => 'required',
10693
]);
10794

10895
$product->update($request->all());

0 commit comments

Comments
 (0)