File: /var/www/javago-portal-updates/app/Http/Controllers/Admin/AdminController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Actions\AdminUpdateProfileAction;
use App\Actions\ChangePasswordAction;
use App\Helpers\Aws;
use App\Http\Controllers\Controller;
use App\Http\Requests\ChangePasswordRequest;
use App\Http\Requests\EditAdminProfileRequest;
use App\Models\Admin;
use App\Models\Cafe;
use App\Models\Order;
use App\Models\User;
use App\Models\PromoCodes;
use App\Services\AdminService;
use App\Services\ChangePasswordService;
use Carbon\Carbon;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Exception;
use Yajra\DataTables\Facades\DataTables;
class AdminController extends Controller
{
private $adminService;
private $changePasswordService;
private $userModel;
public function __construct()
{
$this->adminService = new AdminService(Admin::class);
$this->changePasswordService = new ChangePasswordService(Admin::class);
$this->userModel = new User;
}
public function index()
{
$data['allOrder'] = Order::count();
$data['allRevenue'] = Order::sum('total_amount');
$data['allUser'] = User::where([['is_active', 1], ['is_verified', 1], ['is_deleted', 0]])->count();
$data['allCafe'] = Cafe::where([['is_active', 1], ['approved', 1], ['deleted_at', 0], ['is_admin_approved', 1]])->count();
return view('admin.dashboard', $data);
}
public function myProfile()
{
$data = [];
$data['name'] = Auth::user()->full_name;
$data['email'] = Auth::user()->email;
$data['profile_picture'] = Auth::user()->profile_picture ? Aws::presignedUri(Auth::user()->profile_picture) : '';
$data['address'] = Auth::user()->address;
$data['url'] = route('admin.editProfile');
return view('admin.profile', $data);
}
public function editProfile()
{
$data = [];
$data['name'] = Auth::user()->full_name;
$data['email'] = Auth::user()->email;
$data['profile_picture'] = Auth::user()->profile_picture ? Aws::presignedUri(Auth::user()->profile_picture) : '';
$data['address'] = Auth::user()->address;
$data['url'] = route('admin.updateProfile');
$data['cancelUrl'] = route('admin.myProfile');
return view('admin.edit-profile', $data);
}
public function updateProfile(EditAdminProfileRequest $request, AdminUpdateProfileAction $adminUpdateProfileAction)
{
return $adminUpdateProfileAction->handle(Admin::class, $request);
// return $this->adminService->updateProfile($request);
}
public function changePasswordForm()
{
$url = route('admin.changePassword');
return view('change-password', compact('url'));
}
public function changePassword(ChangePasswordRequest $request, ChangePasswordAction $changePasswordAction)
{
return $changePasswordAction->handle(Admin::class, $request);
// return $this->changePasswordService->changePassword($request);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
public function generateCodes(){
$url = route('admin.submit-generate-codes');
$promoCodes = PromoCodes::orderBy('created_at', 'desc')->paginate(10); // 10 per page
return view('admin.generate-codes', compact('url', 'promoCodes'));
}
public function submitGenerateCodes(Request $request){
try {
$validated = $request->validate([
'type' => 'required|in:year_free_then_fixed,month_free_then_discount',
'quantity' => 'required|integer|min:1|max:1000',
]);
$generatedCodes = [];
for ($i = 0; $i < $validated['quantity']; $i++) {
$code = strtoupper(Str::random(10));
$data = [
'code' => $code,
'type' => $validated['type'],
'is_active' => true,
];
if ($validated['type'] === 'year_free_then_fixed') {
$data['fixed_price'] = 12.99;
$data['free_months'] = 12;
} elseif ($validated['type'] === 'month_free_then_discount') {
$data['fixed_price'] = null;
$data['free_months'] = 1;
$data['discount_percent'] = 15;
$data['discount_duration_months'] = 12;
}
PromoCodes::create($data);
$generatedCodes[] = $code;
}
return back()->with('success', 'Generated Promo Codes: <strong>' . implode(', ', $generatedCodes) . '</strong>');
} catch (Exception $e) {
return back()->withErrors(['error' => 'Something went wrong: ' . $e->getMessage()]);
}
}
}