feat(schedules): add bulk delete via checkboxes
- Add BulkDeleteSchedulesTask, BulkDeleteSchedulesAction - Add route DELETE /dashboard/schedules/bulk-destroy - Add bulkDestroy method to ScheduleController - Update Index.vue: select all/individual checkboxes, bulk actions bar - Fix CheckDashboardPermission: replace naive /s$/ regex with Str::singular() to resolve irregular plurals (faculties→faculty, categories→category)
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\Dashboard\Actions\Schedules;
|
||||
|
||||
use App\Containers\Dashboard\Tasks\Schedules\BulkDeleteSchedulesTask;
|
||||
|
||||
class BulkDeleteSchedulesAction
|
||||
{
|
||||
public function __construct(
|
||||
private readonly BulkDeleteSchedulesTask $bulkDeleteSchedulesTask,
|
||||
) {}
|
||||
|
||||
public function run(array $ids): int
|
||||
{
|
||||
return $this->bulkDeleteSchedulesTask->run($ids);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\Dashboard\Tasks\Schedules;
|
||||
|
||||
use App\Containers\Schedule\Models\Schedule;
|
||||
|
||||
class BulkDeleteSchedulesTask
|
||||
{
|
||||
public function run(array $ids): int
|
||||
{
|
||||
return Schedule::whereIn('id', $ids)->delete();
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ namespace App\Containers\Dashboard\UI\WEB\Controllers;
|
||||
use App\Containers\Dashboard\Actions\Schedules\CreateScheduleAction;
|
||||
use App\Containers\Dashboard\Actions\Schedules\UpdateScheduleAction;
|
||||
use App\Containers\Dashboard\Actions\Schedules\DeleteScheduleAction;
|
||||
use App\Containers\Dashboard\Actions\Schedules\BulkDeleteSchedulesAction;
|
||||
use App\Containers\Dashboard\Actions\Schedules\ListSchedulesAction;
|
||||
use App\Containers\Dashboard\UI\WEB\Requests\StoreScheduleRequest;
|
||||
use App\Containers\Dashboard\UI\WEB\Requests\UpdateScheduleRequest;
|
||||
@@ -23,6 +24,7 @@ class ScheduleController extends Controller
|
||||
private readonly CreateScheduleAction $createScheduleAction,
|
||||
private readonly UpdateScheduleAction $updateScheduleAction,
|
||||
private readonly DeleteScheduleAction $deleteScheduleAction,
|
||||
private readonly BulkDeleteSchedulesAction $bulkDeleteSchedulesAction,
|
||||
) {}
|
||||
|
||||
/**
|
||||
@@ -150,4 +152,22 @@ class ScheduleController extends Controller
|
||||
->with('error', 'Ошибка при удалении расписания: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Массовое удаление расписаний
|
||||
*/
|
||||
public function bulkDestroy(Request $request): RedirectResponse
|
||||
{
|
||||
$request->validate(['ids' => 'required|array', 'ids.*' => 'integer|exists:schedules,id']);
|
||||
|
||||
try {
|
||||
$count = $this->bulkDeleteSchedulesAction->run($request->ids);
|
||||
|
||||
return redirect()->back()
|
||||
->with('success', "Удалено {$count} расписаний");
|
||||
} catch (\Exception $e) {
|
||||
return back()
|
||||
->with('error', 'Ошибка при удалении: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,6 +198,7 @@ Route::middleware(['access-check', 'dashboard.auth', 'dashboard.permission'])->g
|
||||
Route::get('/', [ScheduleController::class, 'index'])->name('index');
|
||||
Route::get('/create', [ScheduleController::class, 'create'])->name('create');
|
||||
Route::post('/', [ScheduleController::class, 'store'])->name('store');
|
||||
Route::delete('/bulk-destroy', [ScheduleController::class, 'bulkDestroy'])->name('bulk-destroy');
|
||||
Route::get('/{schedule}/edit', [ScheduleController::class, 'edit'])->name('edit');
|
||||
Route::put('/{schedule}', [ScheduleController::class, 'update'])->name('update');
|
||||
Route::delete('/{schedule}', [ScheduleController::class, 'destroy'])->name('destroy');
|
||||
|
||||
Reference in New Issue
Block a user