packageRepository = new PackageRepository; } public function index(Request $request) { $perPage = $request->has('per-page') ? $request->input('per-page') : null; $filter = $request->has('filter') ? $request->input('filter') : []; $packages = $this->packageRepository->allPackages($perPage, $filter); return view('package::index', compact('packages')); } /** * Show the form for creating a new resource. */ public function create() { $countries = $this->packageRepository->getAllCountries(); return view('package::create', compact('countries')); } /** * Store a newly created resource in storage. */ public function store(CreatePackageRequest $request): RedirectResponse { try { $validated = $request->validated(); $this->packageRepository->storePackage($validated); toastr()->success('Package created successfully.'); return redirect()->route('cms.packages.index'); } catch (\Throwable $th) { report($th); toastr()->error('Something went wrong.'); return back(); } } /** * Show the specified resource. */ public function show($id) { return view('package::show'); } /** * Show the form for editing the specified resource. */ public function edit($uuid) { $data['countries'] = $this->packageRepository->getAllCountries(); $data['package'] = $this->packageRepository->findPackageWithCountriesByUuid($uuid); if (!$data['package']) { toastr()->error('Package not found.'); return back(); } return view('package::edit', $data); } /** * Update the specified resource in storage. */ public function update(CreatePackageRequest $request, $uuid): RedirectResponse { try { $validated = $request->validated(); $package = $this->packageRepository->findPackageByUuid($uuid); if (!$package) { toastr()->error('Package not found !'); return back(); } $this->packageRepository->updatePackage(validated: $validated, uuid: $uuid); toastr()->success('Package updated successfully.'); return redirect()->route('cms.packages.index'); } catch (\Throwable $th) { report($th); toastr()->error('Something went wrong.'); return back(); } } /** * Remove the specified resource from storage. */ public function destroy($uuid) { DB::beginTransaction(); try { $package = $this->packageRepository->deletePackage(uuid: $uuid); if (!$package) { toastr()->error('Package not found.'); return back(); } DB::commit(); toastr()->success('Package deleted successfully.'); return redirect()->route('cms.packages.index'); } catch (\Throwable $th) { DB::rollback(); report($th); toastr()->error('Something went wrong.'); return back(); } } }