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]),
]);
}
}