File: /var/www/html/spion/app/Http/Controllers/UserController.php
<?php
namespace App\Http\Controllers;
use App\Mail\SendOTP;
use App\Models\Template;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
class UserController extends Controller
{
public function profile()
{
$user = auth()->user();
// if (!$user) {
// return redirect()->route('login');
// }
if (Auth::check()) {
return view('user.profile', compact('user'));
}
return redirect()->route('home.website');
}
public function wishlist(Request $request)
{
$user = auth()->user();
if (!$user) {
return response()->json(['error' => 'User not authenticated'], 401);
}
$limit = 6;
$currentPage = $request->current_page ?: 1;
$offset = ($currentPage - 1) * $limit;
$templatesCount = Template::whereHas('wishlists', function($query) use ($user) {
$query->where('user_id', $user->id);
})->count();
$templates = Template::whereHas('wishlists', function($query) use ($user) {
$query->where('user_id', $user->id);
})
->offset($offset)
->limit($limit)
->get()
->map(function ($template) {
$template->is_in_wishlist = true;
return $template;
});
$lastPage = ceil($templatesCount / $limit);
if ($request->ajax()) {
return response()->json([
'templates' => $templates,
'templatesCount' => $templatesCount,
'current_page' => $currentPage,
'limit' => $limit,
'last_page' => $lastPage,
]);
}
return view('user.wishlist', compact('templates'));
}
public function logout()
{
Auth::logout();
return redirect()->route('home.website')->with('success', 'Logged out successfully!');
}
public function requestOtp(Request $request)
{
$otp = rand(1000,9999);
Log::info("otp = ".$otp);
$user = User::where('email','=',$request->email)->update(['otp' => $otp]);
if($user){
Mail::to($request->email)->send(new SendOTP($user));
return response(["status" => 200, "message" => "OTP sent successfully"]);
}
else{
return response(["status" => 401, 'message' => 'Invalid']);
}
}
public function verifyOtp(Request $request){
$user = User::where([['email','=',$request->email],['otp','=',$request->otp]])->first();
if($user){
auth()->login($user, true);
User::where('email','=',$request->email)->update(['otp' => null]);
//$accessToken = auth()->user()->createToken('authToken')->accessToken;
//return response(["status" => 200, "message" => "Success", 'user' => auth()->user(), 'access_token' => $accessToken]);
return response(["status" => 200, "message" => "Success", 'user' => auth()->user()]);
}
else{
return response(["status" => 401, 'message' => 'OTP verification failed']);
}
}
}