HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
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()]),
        ]);
    }
}