File: /home/xedaptot/be.naniguide.com/app/Http/Controllers/Refactor/Ads/AdLeadFormController.php
<?php
namespace App\Http\Controllers\Refactor\Ads;
use App\Http\Controllers\Controller;
use App\Http\Requests\Refactor\Ads\StoreAdLeadFormRequest;
use App\Model\AdLeadFormConfig;
use App\Services\Ads\AdLeadFormService;
use Illuminate\Http\Request;
class AdLeadFormController extends Controller
{
protected AdLeadFormService $service;
public function __construct(AdLeadFormService $service)
{
$this->service = $service;
}
public function index(Request $request)
{
$customer = $request->user()->customer;
$customerId = $customer->local()->id;
$counts = [
'total' => AdLeadFormConfig::ofCustomer($customerId)->count(),
'active' => AdLeadFormConfig::ofCustomer($customerId)->where('status', AdLeadFormConfig::STATUS_ACTIVE)->count(),
'leads' => (int) AdLeadFormConfig::ofCustomer($customerId)->sum('leads_count'),
'paused' => AdLeadFormConfig::ofCustomer($customerId)->where('status', AdLeadFormConfig::STATUS_PAUSED)->count(),
];
return view('refactor.pages.ads.lead_forms.index', [
'counts' => $counts,
]);
}
public function listing(Request $request)
{
$customer = $request->user()->customer;
$customerId = $customer->local()->id;
$configs = AdLeadFormConfig::ofCustomer($customerId)
->search($request->keyword)
->orderBy('created_at', 'desc')
->paginate($request->per_page ?? 15);
return view('refactor.pages.ads.lead_forms._list', [
'configs' => $configs,
]);
}
public function create(Request $request)
{
$customer = $request->user()->customer;
$mailLists = $customer->local()->mailLists()->orderBy('name')->get();
return view('refactor.pages.ads.lead_forms.create', [
'mailLists' => $mailLists,
]);
}
public function store(StoreAdLeadFormRequest $request)
{
$customer = $request->user()->customer;
$config = $this->service->create($customer->local(), $request->validated());
return response()->json([
'status' => 'success',
'message' => trans('refactor/ads_lead_forms.form_created'),
'redirect' => route('refactor.ads.lead_forms.index'),
]);
}
public function sync(Request $request, string $uid)
{
$customer = $request->user()->customer;
$config = AdLeadFormConfig::ofCustomer($customer->local()->id)->where('uid', $uid)->firstOrFail();
$created = $this->service->syncLeads($config);
return response()->json([
'status' => 'success',
'message' => trans('refactor/ads_lead_forms.synced', ['count' => $created]),
]);
}
public function delete(Request $request)
{
$customer = $request->user()->customer;
$uids = is_array($request->uids) ? $request->uids : explode(',', $request->uids);
$configs = AdLeadFormConfig::ofCustomer($customer->local()->id)->whereIn('uid', $uids)->get();
foreach ($configs as $config) {
$this->service->delete($config);
}
return response()->json([
'status' => 'success',
'message' => trans('refactor/ads_lead_forms.forms_deleted', ['count' => $configs->count()]),
]);
}
}