From e0f58565898e07a20876bb5d04cc9ebb775e96b8 Mon Sep 17 00:00:00 2001 From: Lance Pioch Date: Sat, 22 Oct 2022 19:49:18 -0400 Subject: [PATCH 1/3] Delete schedule repository --- .../ScheduleRepositoryInterface.php | 21 ---------- .../Api/Client/Servers/ScheduleController.php | 24 +++++------ app/Providers/RepositoryServiceProvider.php | 3 -- .../Eloquent/ScheduleRepository.php | 42 ------------------- 4 files changed, 12 insertions(+), 78 deletions(-) delete mode 100644 app/Contracts/Repository/ScheduleRepositoryInterface.php delete mode 100644 app/Repositories/Eloquent/ScheduleRepository.php diff --git a/app/Contracts/Repository/ScheduleRepositoryInterface.php b/app/Contracts/Repository/ScheduleRepositoryInterface.php deleted file mode 100644 index fa9c18b41..000000000 --- a/app/Contracts/Repository/ScheduleRepositoryInterface.php +++ /dev/null @@ -1,21 +0,0 @@ -repository->create([ + /** @var Schedule $model */ + $model = Schedule::query()->create([ 'server_id' => $server->id, 'name' => $request->input('name'), 'cron_day_of_week' => $request->input('day_of_week'), @@ -96,8 +96,8 @@ class ScheduleController extends ClientApiController /** * Updates a given schedule with the new data provided. * - * @throws \Pterodactyl\Exceptions\DisplayException - * @throws \Pterodactyl\Exceptions\Model\DataValidationException + * @throws DisplayException + * @throws DataValidationException * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException */ public function update(UpdateScheduleRequest $request, Server $server, Schedule $schedule): array @@ -124,7 +124,7 @@ class ScheduleController extends ClientApiController $data['is_processing'] = false; } - $this->repository->update($schedule->id, $data); + $schedule->update($data); Activity::event('server:schedule.update') ->subject($schedule) @@ -156,7 +156,7 @@ class ScheduleController extends ClientApiController */ public function delete(DeleteScheduleRequest $request, Server $server, Schedule $schedule): JsonResponse { - $this->repository->delete($schedule->id); + $schedule->delete(); Activity::event('server:schedule.delete')->subject($schedule)->property('name', $schedule->name)->log(); @@ -166,7 +166,7 @@ class ScheduleController extends ClientApiController /** * Get the next run timestamp based on the cron data provided. * - * @throws \Pterodactyl\Exceptions\DisplayException + * @throws DisplayException */ protected function getNextRunAt(Request $request): Carbon { @@ -178,7 +178,7 @@ class ScheduleController extends ClientApiController $request->input('month'), $request->input('day_of_week') ); - } catch (Exception $exception) { + } catch (Exception) { throw new DisplayException('The cron data provided does not evaluate to a valid expression.'); } } diff --git a/app/Providers/RepositoryServiceProvider.php b/app/Providers/RepositoryServiceProvider.php index 8a0434f52..383ccc505 100644 --- a/app/Providers/RepositoryServiceProvider.php +++ b/app/Providers/RepositoryServiceProvider.php @@ -14,7 +14,6 @@ use Pterodactyl\Repositories\Eloquent\SessionRepository; use Pterodactyl\Repositories\Eloquent\SubuserRepository; use Pterodactyl\Repositories\Eloquent\DatabaseRepository; use Pterodactyl\Repositories\Eloquent\LocationRepository; -use Pterodactyl\Repositories\Eloquent\ScheduleRepository; use Pterodactyl\Repositories\Eloquent\SettingsRepository; use Pterodactyl\Repositories\Eloquent\AllocationRepository; use Pterodactyl\Contracts\Repository\EggRepositoryInterface; @@ -31,7 +30,6 @@ use Pterodactyl\Contracts\Repository\SessionRepositoryInterface; use Pterodactyl\Contracts\Repository\SubuserRepositoryInterface; use Pterodactyl\Contracts\Repository\DatabaseRepositoryInterface; use Pterodactyl\Contracts\Repository\LocationRepositoryInterface; -use Pterodactyl\Contracts\Repository\ScheduleRepositoryInterface; use Pterodactyl\Contracts\Repository\SettingsRepositoryInterface; use Pterodactyl\Contracts\Repository\AllocationRepositoryInterface; use Pterodactyl\Contracts\Repository\EggVariableRepositoryInterface; @@ -55,7 +53,6 @@ class RepositoryServiceProvider extends ServiceProvider $this->app->bind(LocationRepositoryInterface::class, LocationRepository::class); $this->app->bind(NestRepositoryInterface::class, NestRepository::class); $this->app->bind(NodeRepositoryInterface::class, NodeRepository::class); - $this->app->bind(ScheduleRepositoryInterface::class, ScheduleRepository::class); $this->app->bind(ServerRepositoryInterface::class, ServerRepository::class); $this->app->bind(ServerVariableRepositoryInterface::class, ServerVariableRepository::class); $this->app->bind(SessionRepositoryInterface::class, SessionRepository::class); diff --git a/app/Repositories/Eloquent/ScheduleRepository.php b/app/Repositories/Eloquent/ScheduleRepository.php deleted file mode 100644 index 145333f45..000000000 --- a/app/Repositories/Eloquent/ScheduleRepository.php +++ /dev/null @@ -1,42 +0,0 @@ -getBuilder()->withCount('tasks')->where('server_id', '=', $server)->get($this->getColumns()); - } - - /** - * Return a schedule model with all the associated tasks as a relationship. - * - * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException - */ - public function getScheduleWithTasks(int $schedule): Schedule - { - try { - return $this->getBuilder()->with('tasks')->findOrFail($schedule, $this->getColumns()); - } catch (ModelNotFoundException) { - throw new RecordNotFoundException(); - } - } -} From 451522e6cf6fc7fe566ca9bbb175e3ed2c5c8980 Mon Sep 17 00:00:00 2001 From: Lance Pioch Date: Sat, 22 Oct 2022 19:55:43 -0400 Subject: [PATCH 2/3] Replace task repo too --- .../Repository/TaskRepositoryInterface.php | 20 --------- .../Client/Servers/ScheduleTaskController.php | 11 +++-- app/Providers/RepositoryServiceProvider.php | 3 -- app/Repositories/Eloquent/TaskRepository.php | 44 ------------------- 4 files changed, 5 insertions(+), 73 deletions(-) delete mode 100644 app/Contracts/Repository/TaskRepositoryInterface.php delete mode 100644 app/Repositories/Eloquent/TaskRepository.php diff --git a/app/Contracts/Repository/TaskRepositoryInterface.php b/app/Contracts/Repository/TaskRepositoryInterface.php deleted file mode 100644 index 0cd980d21..000000000 --- a/app/Contracts/Repository/TaskRepositoryInterface.php +++ /dev/null @@ -1,20 +0,0 @@ -tasks()->orderByDesc('sequence_id')->first(); - /** @var \Pterodactyl\Models\Task $task */ - $task = $this->repository->create([ + /** @var Task $task */ + $task = Task::query()->create([ 'schedule_id' => $schedule->id, 'sequence_id' => ($lastTask->sequence_id ?? 0) + 1, 'action' => $request->input('action'), @@ -84,7 +83,7 @@ class ScheduleTaskController extends ClientApiController throw new HttpForbiddenException("A backup task cannot be created when the server's backup limit is set to 0."); } - $this->repository->update($task->id, [ + Task::query()->update([ 'action' => $request->input('action'), 'payload' => $request->input('payload') ?? '', 'time_offset' => $request->input('time_offset'), diff --git a/app/Providers/RepositoryServiceProvider.php b/app/Providers/RepositoryServiceProvider.php index 383ccc505..9cc332f29 100644 --- a/app/Providers/RepositoryServiceProvider.php +++ b/app/Providers/RepositoryServiceProvider.php @@ -6,7 +6,6 @@ use Illuminate\Support\ServiceProvider; use Pterodactyl\Repositories\Eloquent\EggRepository; use Pterodactyl\Repositories\Eloquent\NestRepository; use Pterodactyl\Repositories\Eloquent\NodeRepository; -use Pterodactyl\Repositories\Eloquent\TaskRepository; use Pterodactyl\Repositories\Eloquent\UserRepository; use Pterodactyl\Repositories\Eloquent\ApiKeyRepository; use Pterodactyl\Repositories\Eloquent\ServerRepository; @@ -20,7 +19,6 @@ use Pterodactyl\Contracts\Repository\EggRepositoryInterface; use Pterodactyl\Repositories\Eloquent\EggVariableRepository; use Pterodactyl\Contracts\Repository\NestRepositoryInterface; use Pterodactyl\Contracts\Repository\NodeRepositoryInterface; -use Pterodactyl\Contracts\Repository\TaskRepositoryInterface; use Pterodactyl\Contracts\Repository\UserRepositoryInterface; use Pterodactyl\Repositories\Eloquent\DatabaseHostRepository; use Pterodactyl\Contracts\Repository\ApiKeyRepositoryInterface; @@ -58,7 +56,6 @@ class RepositoryServiceProvider extends ServiceProvider $this->app->bind(SessionRepositoryInterface::class, SessionRepository::class); $this->app->bind(SettingsRepositoryInterface::class, SettingsRepository::class); $this->app->bind(SubuserRepositoryInterface::class, SubuserRepository::class); - $this->app->bind(TaskRepositoryInterface::class, TaskRepository::class); $this->app->bind(UserRepositoryInterface::class, UserRepository::class); } } diff --git a/app/Repositories/Eloquent/TaskRepository.php b/app/Repositories/Eloquent/TaskRepository.php deleted file mode 100644 index 942c54d47..000000000 --- a/app/Repositories/Eloquent/TaskRepository.php +++ /dev/null @@ -1,44 +0,0 @@ -getBuilder()->with('server.user', 'schedule')->findOrFail($id, $this->getColumns()); - } catch (ModelNotFoundException) { - throw new RecordNotFoundException(); - } - } - - /** - * Returns the next task in a schedule. - */ - public function getNextTask(int $schedule, int $index): ?Task - { - return $this->getBuilder()->where('schedule_id', '=', $schedule) - ->orderBy('sequence_id') - ->where('sequence_id', '>', $index) - ->first($this->getColumns()); - } -} From 29c3d80e5b51f32b80959fa4f211a8d253eccab0 Mon Sep 17 00:00:00 2001 From: Lance Pioch Date: Wed, 26 Oct 2022 21:05:51 -0400 Subject: [PATCH 3/3] Use actual instance --- .../Controllers/Api/Client/Servers/ScheduleTaskController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/Client/Servers/ScheduleTaskController.php b/app/Http/Controllers/Api/Client/Servers/ScheduleTaskController.php index 44d4e9df8..35ce258f4 100644 --- a/app/Http/Controllers/Api/Client/Servers/ScheduleTaskController.php +++ b/app/Http/Controllers/Api/Client/Servers/ScheduleTaskController.php @@ -83,7 +83,7 @@ class ScheduleTaskController extends ClientApiController throw new HttpForbiddenException("A backup task cannot be created when the server's backup limit is set to 0."); } - Task::query()->update([ + $task->update([ 'action' => $request->input('action'), 'payload' => $request->input('payload') ?? '', 'time_offset' => $request->input('time_offset'),