File: /home/xedaptot/be.naniguide.com/app/Http/Controllers/Refactor/Ads/AdAutomationController.php
<?php
namespace App\Http\Controllers\Refactor\Ads;
use App\Http\Controllers\Controller;
use App\Http\Requests\Refactor\Ads\StoreAdAutomationRequest;
use App\Model\AdAutomationRule;
use App\Services\Ads\AdAutomationService;
use Illuminate\Http\Request;
class AdAutomationController extends Controller
{
protected AdAutomationService $service;
public function __construct(AdAutomationService $service)
{
$this->service = $service;
}
public function index(Request $request)
{
$customer = $request->user()->customer;
$customerId = $customer->local()->id;
$counts = [
'total' => AdAutomationRule::ofCustomer($customerId)->count(),
'active' => AdAutomationRule::ofCustomer($customerId)->where('status', 'active')->count(),
'paused' => AdAutomationRule::ofCustomer($customerId)->where('status', 'paused')->count(),
'executions' => (int) AdAutomationRule::ofCustomer($customerId)->sum('executions_count'),
];
return view('refactor.pages.ads.automations.index', [
'counts' => $counts,
]);
}
public function listing(Request $request)
{
$customer = $request->user()->customer;
$customerId = $customer->local()->id;
$rules = AdAutomationRule::ofCustomer($customerId)
->search($request->keyword)
->orderBy('created_at', 'desc')
->paginate($request->per_page ?? 15);
return view('refactor.pages.ads.automations._list', [
'rules' => $rules,
]);
}
public function create(Request $request)
{
return view('refactor.pages.ads.automations.create');
}
public function store(StoreAdAutomationRequest $request)
{
$customer = $request->user()->customer;
$rule = $this->service->create($customer->local(), $request->validated());
return response()->json([
'status' => 'success',
'message' => trans('refactor/ads_automations.rule_created'),
'redirect' => route('refactor.ads.automations.index'),
]);
}
public function pause(Request $request, string $uid)
{
$customer = $request->user()->customer;
$rule = AdAutomationRule::ofCustomer($customer->local()->id)->where('uid', $uid)->firstOrFail();
$this->service->pause($rule);
return response()->json([
'status' => 'success',
'message' => trans('refactor/ads_automations.rule_paused'),
]);
}
public function activate(Request $request, string $uid)
{
$customer = $request->user()->customer;
$rule = AdAutomationRule::ofCustomer($customer->local()->id)->where('uid', $uid)->firstOrFail();
$this->service->activate($rule);
return response()->json([
'status' => 'success',
'message' => trans('refactor/ads_automations.rule_activated'),
]);
}
public function delete(Request $request)
{
$customer = $request->user()->customer;
$uids = is_array($request->uids) ? $request->uids : explode(',', $request->uids);
$rules = AdAutomationRule::ofCustomer($customer->local()->id)->whereIn('uid', $uids)->get();
foreach ($rules as $rule) {
$this->service->delete($rule);
}
return response()->json([
'status' => 'success',
'message' => trans('refactor/ads_automations.rules_deleted', ['count' => $rules->count()]),
]);
}
}