<?php namespace App\Actions\Database; use App\Enums\BackupFileStatus; use App\Models\Backup; use App\Models\BackupFile; use Illuminate\Support\Str; class RunBackup { public function run(Backup $backup): BackupFile { $file = new BackupFile([ 'backup_id' => $backup->id, 'name' => Str::of($backup->database->name)->slug().'-'.now()->format('YmdHis'), 'status' => BackupFileStatus::CREATING, ]); $file->save(); dispatch(function () use ($file) { $file->backup->server->database()->handler()->runBackup($file); $file->status = BackupFileStatus::CREATED; $file->save(); })->catch(function () use ($file) { $file->status = BackupFileStatus::FAILED; $file->save(); })->onConnection('ssh'); return $file; } }