/home/brandsfa/.trash/app/Http/Controllers/Vendor/DeliveryMan/EmergencyContactController.php
<?php
namespace App\Http\Controllers\Vendor\DeliveryMan;
use App\Contracts\Repositories\EmergencyContactRepositoryInterface;
use App\Enums\ViewPaths\Vendor\Dashboard;
use App\Enums\ViewPaths\Vendor\EmergencyContact;
use App\Http\Controllers\BaseController;
use App\Http\Requests\Vendor\EmergencyContactRequest;
use App\Services\DeliveryManService;
use App\Services\EmergencyContactService;
use Brian2694\Toastr\Facades\Toastr;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\View\View;
class EmergencyContactController extends BaseController
{
/**
* @param EmergencyContactRepositoryInterface $emergencyContactRepo
* @param EmergencyContactService $emergencyContactService
* @param DeliveryManService $deliveryManService
*/
public function __construct(
private readonly EmergencyContactRepositoryInterface $emergencyContactRepo,
private readonly EmergencyContactService $emergencyContactService,
private readonly DeliveryManService $deliveryManService,
)
{
}
/**
* @param Request|null $request
* @param string|null $type
* @return \Illuminate\Contracts\View\View|Collection|LengthAwarePaginator|callable|RedirectResponse|null
*/
public function index(?Request $request, string $type = null): \Illuminate\Contracts\View\View|Collection|LengthAwarePaginator|null|callable|RedirectResponse
{
if (!$this->deliveryManService->checkConditions()){
return redirect()->route(Dashboard::INDEX[ROUTE]);
}
return $this->getListView();
}
/**
* @return View|RedirectResponse
*/
public function getListView():View|RedirectResponse
{
$contacts = $this->emergencyContactRepo->getListWhere(filters:['user_id'=>auth('seller')->id()],dataLimit: getWebConfig(name: 'pagination_limit'));
return view(EmergencyContact::INDEX[VIEW],compact('contacts'));
}
/**
* @param EmergencyContactRequest $request
* @return RedirectResponse
*/
public function add(EmergencyContactRequest $request):RedirectResponse
{
$this->emergencyContactRepo->add(data:$this->emergencyContactService->getEmergencyContactData(request:$request,id:auth('seller')->id() ));
Toastr::success(translate('emergency_contact_added_successfully').'!');
return redirect()->back();
}
/**
* @param Request $request
* @return JsonResponse
*/
public function updateStatus(Request $request):JsonResponse
{
$contact = $this->emergencyContactRepo->getFirstWhere(params:['user_id' => auth('seller')->id(), 'id' => $request['id']]);
$status = $this->emergencyContactRepo->update(id:$contact['id'],data: ['status' => $request['status'] ?? 0]);
if ($status === true){
return response()->json(['message' => translate('contact_status_changed_successfully').'!']);
}else{
return response()->json([
'message' => translate('contact_status_change_failed').'!',
'fail' => 1]);
}
}
/**
* @param Request $request
* @return RedirectResponse
*/
public function delete(Request $request):RedirectResponse
{
$delete = $this->emergencyContactRepo->delete(params:['user_id' => auth('seller')->id(), 'id' => $request['id']]);
if ($delete === true) {
Toastr::success(translate('emergency_contact_deleted_successfully').'!');
} else {
Toastr::error(translate('emergency_contact_delete_failed').'!');
}
return redirect()->back();
}
}