Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 14 additions & 12 deletions app/Http/Controllers/AuthController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,65 +4,67 @@

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Hash;

class AuthController extends Controller
{
public function register(Request $request) {
public function register(Request $request)
{
$fields = $request->validate([
'name' => 'required|string',
'email' => 'required|string|unique:users,email',
'password' => 'required|string|confirmed'
'password' => 'required|string|confirmed',
]);

$user = User::create([
'name' => $fields['name'],
'email' => $fields['email'],
'password' => bcrypt($fields['password'])
'password' => bcrypt($fields['password']),
]);

$token = $user->createToken('myapptoken')->plainTextToken;

$response = [
'user' => $user,
'token' => $token
'token' => $token,
];

return response($response, 201);
}

public function login(Request $request) {
public function login(Request $request)
{
$fields = $request->validate([
'email' => 'required|string',
'password' => 'required|string'
'password' => 'required|string',
]);

// Check email
$user = User::where('email', $fields['email'])->first();

// Check password
if(!$user || !Hash::check($fields['password'], $user->password)) {
if (!$user || !Hash::check($fields['password'], $user->password)) {
return response([
'message' => 'Bad creds'
'message' => 'Bad creds',
], 401);
}

$token = $user->createToken('myapptoken')->plainTextToken;

$response = [
'user' => $user,
'token' => $token
'token' => $token,
];

return response($response, 201);
}

public function logout(Request $request) {
public function logout(Request $request)
{
auth()->user()->tokens()->delete();

return [
'message' => 'Logged out'
'message' => 'Logged out',
];
}
}
54 changes: 41 additions & 13 deletions app/Http/Controllers/ProductController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use App\Models\Product;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class ProductController extends Controller
{
Expand All @@ -20,24 +21,31 @@ public function index()
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'slug' => 'required',
'price' => 'required'
'price' => 'required',
]);

return Product::create($request->all());
// get current user id
$userId = $request->user()->id;
$product = $request->all();
if ($userId) {
$product = array_merge($request->all(), ['user_id' => $userId]);
}

return Product::create($product);
}

/**
* Display the specified resource.
*
* @param int $id
* @param int $id
*
* @return \Illuminate\Http\Response
*/
public function show($id)
Expand All @@ -48,32 +56,52 @@ public function show($id)
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @param int $id
*
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$product = Product::find($id);
$product->update($request->all());
return $product;

if ($product->user_id == $request->user()->id) {
// update
$product->update($request->all());

return $product;
}

return response([
'message' => 'forbidden to update this product',
], 403);
}

/**
* Remove the specified resource from storage.
*
* @param int $id
* @param int $id
*
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
return Product::destroy($id);
$product = Product::find($id);

if ($product->user_id == request()->user()->id) {
// delete product
return $product->delete();
}

return response([
'message' => 'forbidden to delete this product',
], 403);
}

/**
* Search for a name
/**
* Search for a name.
*
* @param string $name
*
* @param str $name
* @return \Illuminate\Http\Response
*/
public function search($name)
Expand Down
8 changes: 7 additions & 1 deletion app/Models/Product.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ class Product extends Model
'name',
'slug',
'description',
'price'
'price',
'user_id',
];

public function user()
{
$this->belongsTo(Product::class);
}
}
10 changes: 8 additions & 2 deletions app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
use HasFactory, Notifiable, HasApiTokens;
use HasFactory;
use Notifiable;
use HasApiTokens;

/**
* The attributes that are mass assignable.
Expand Down Expand Up @@ -41,4 +42,9 @@ class User extends Authenticatable
protected $casts = [
'email_verified_at' => 'datetime',
];

public function products()
{
$this->hasMany(Product::class);
}
}
Loading