$input */ public function restore(BackupFile $backupFile, array $input): void { Validator::make($input, self::rules($backupFile->backup->server))->validate(); /** @var Database $database */ $database = Database::query()->findOrFail($input['database']); $backupFile->status = BackupFileStatus::RESTORING; $backupFile->restored_to = $database->name; $backupFile->save(); dispatch(function () use ($backupFile, $database): void { /** @var Service $service */ $service = $database->server->database(); /** @var \App\Services\Database\Database $databaseHandler */ $databaseHandler = $service->handler(); $databaseHandler->restoreBackup($backupFile, $database->name); $backupFile->status = BackupFileStatus::RESTORED; $backupFile->restored_at = now(); $backupFile->save(); })->catch(function () use ($backupFile): void { $backupFile->status = BackupFileStatus::RESTORE_FAILED; $backupFile->save(); })->onQueue('ssh'); } /** * @return array> */ public static function rules(Server $server): array { return [ 'database' => [ 'required', Rule::exists('databases', 'id')->where('server_id', $server->id), ], ]; } }