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/ai.naniguide.com/app/Http/Controllers/Admin/WarmupStrategyController.php
<?php

namespace App\Http\Controllers\Admin;

use App\Dto\WarmupStrategyData;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\WarmupStrategy\PreviewWarmupStrategyRequest;
use App\Http\Requests\Admin\WarmupStrategy\StoreWarmupStrategyRequest;
use App\Http\Requests\Admin\WarmupStrategy\UpdateWarmupStrategyRequest;
use App\Model\WarmupStrategy;
use App\Services\WarmupStrategyService;

class WarmupStrategyController extends Controller
{
    public function __construct(protected WarmupStrategyService $warmupStrategyService)
    {
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        return view('admin.warmup_strategies.index', [
            'emptyStrategy' => $this->warmupStrategyService->newStrategy(),
        ]);
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function list(Request $request)
    {
        $sortOrder = in_array($request->sort_order, [
            'warmup_strategies.created_at',
            'warmup_strategies.updated_at',
            'warmup_strategies.name',
            'warmup_strategies.limit_type',
        ], true) ? $request->sort_order : 'warmup_strategies.updated_at';

        $sortDirection = in_array($request->sort_direction, ['asc', 'desc'], true) ? $request->sort_direction : 'desc';

        $strategies = $this->warmupStrategyService->listQuery($request->keyword)
            ->orderBy($sortOrder, $sortDirection)
            ->paginate($request->per_page);

        $previews = [];

        foreach ($strategies as $strategy) {
            $previews[$strategy->id] = $this->warmupStrategyService->buildPreview($strategy);
        }

        return view('admin.warmup_strategies._list', [
            'strategies' => $strategies,
            'previews' => $previews,
        ]);
    }

    public function preview(PreviewWarmupStrategyRequest $request)
    {
        $preview = $this->warmupStrategyService->buildPreview(
            WarmupStrategyData::fromArray($request->validated())
        );

        return response()->json($preview);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(Request $request)
    {
        $warmupStrategy = $this->warmupStrategyService->newStrategy($request->query('preset'));

        return view('admin.warmup_strategies.create', [
            'warmupStrategy' => $warmupStrategy,
            'preview' => $this->warmupStrategyService->buildPreview($warmupStrategy),
            'presetPayloads' => [
                WarmupStrategy::PRESET_BALANCED => $this->warmupStrategyService->presetPayload(WarmupStrategy::PRESET_BALANCED),
                WarmupStrategy::PRESET_CAUTIOUS => $this->warmupStrategyService->presetPayload(WarmupStrategy::PRESET_CAUTIOUS),
                WarmupStrategy::PRESET_AGGRESSIVE => $this->warmupStrategyService->presetPayload(WarmupStrategy::PRESET_AGGRESSIVE),
            ],
        ]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(StoreWarmupStrategyRequest $request)
    {
        $warmupStrategy = $this->warmupStrategyService->create(
            WarmupStrategyData::fromArray($request->validated())
        );

        return redirect()->action('Admin\WarmupStrategyController@index')
            ->with('alert-success', trans('warmup.flash.created', ['name' => $warmupStrategy->name]));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($uid)
    {
        $warmupStrategy = WarmupStrategy::findByUid($uid);

        abort_if(is_null($warmupStrategy), 404);

        return view('admin.warmup_strategies.edit', [
            'warmupStrategy' => $warmupStrategy,
            'preview' => $this->warmupStrategyService->buildPreview($warmupStrategy),
            'presetPayloads' => [
                WarmupStrategy::PRESET_BALANCED => $this->warmupStrategyService->presetPayload(WarmupStrategy::PRESET_BALANCED),
                WarmupStrategy::PRESET_CAUTIOUS => $this->warmupStrategyService->presetPayload(WarmupStrategy::PRESET_CAUTIOUS),
                WarmupStrategy::PRESET_AGGRESSIVE => $this->warmupStrategyService->presetPayload(WarmupStrategy::PRESET_AGGRESSIVE),
            ],
        ]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(UpdateWarmupStrategyRequest $request, $uid)
    {
        $warmupStrategy = WarmupStrategy::findByUid($uid);

        abort_if(is_null($warmupStrategy), 404);

        $this->warmupStrategyService->update(
            $warmupStrategy,
            WarmupStrategyData::fromArray($request->validated())
        );

        return redirect()->action('Admin\WarmupStrategyController@edit', $warmupStrategy->uid)
            ->with('alert-success', trans('warmup.flash.updated', ['name' => $warmupStrategy->name]));
    }

    public function delete(Request $request)
    {
        $strategies = WarmupStrategy::whereIn(
            'uid',
            is_array($request->uids) ? $request->uids : explode(',', $request->uids)
        )->get();

        [$deleted, $total] = $this->warmupStrategyService->deleteMany($strategies, $request->user());

        return response()->json([
            'message' => trans('warmup.flash.deleted', [ 'deleted' => $deleted, 'total' => $total]),
        ]);
    }

    public function enable(Request $request)
    {
        $strategies = WarmupStrategy::whereIn(
            'uid',
            is_array($request->uids) ? $request->uids : explode(',', $request->uids)
        )->get();

        [$done, $total] = $this->warmupStrategyService->enableMany($strategies, $request->user());

        return response()->json([
            'status' => 'success',
            'message' => trans('warmup.flash.enabled', [ 'done' => $done, 'total' => $total]),
        ]);
    }

    public function disable(Request $request)
    {
        $strategies = WarmupStrategy::whereIn(
            'uid',
            is_array($request->uids) ? $request->uids : explode(',', $request->uids)
        )->get();

        [$done, $total] = $this->warmupStrategyService->disableMany($strategies, $request->user());
        
        return response()->json([
            'status' => 'success',
            'message' => trans('warmup.flash.disabled', [ 'done' => $done, 'total' => $total]),
        ]);
    }
}