diff --git a/app/Actions/Database/CreateDatabase.php b/app/Actions/Database/CreateDatabase.php index 79cbb77..d2438bc 100755 --- a/app/Actions/Database/CreateDatabase.php +++ b/app/Actions/Database/CreateDatabase.php @@ -53,7 +53,7 @@ public static function rules(Server $server, array $input): array 'name' => [ 'required', 'alpha_dash', - Rule::unique('databases', 'name')->where('server_id', $server->id), + Rule::unique('databases', 'name')->where('server_id', $server->id)->whereNull('deleted_at'), ], 'charset' => [ 'required', diff --git a/app/Actions/Database/DeleteDatabase.php b/app/Actions/Database/DeleteDatabase.php index afb8983..b333c90 100755 --- a/app/Actions/Database/DeleteDatabase.php +++ b/app/Actions/Database/DeleteDatabase.php @@ -2,6 +2,7 @@ namespace App\Actions\Database; +use App\Models\Backup; use App\Models\Database; use App\Models\Server; use App\Models\Service; @@ -16,5 +17,9 @@ public function delete(Server $server, Database $database): void $handler = $service->handler(); $handler->delete($database->name); $database->delete(); + + $database->backups()->each(function (Backup $backup): void { + app(ManageBackup::class)->stop($backup); + }); } } diff --git a/app/Actions/Database/ManageBackup.php b/app/Actions/Database/ManageBackup.php index 954bac1..218f27e 100644 --- a/app/Actions/Database/ManageBackup.php +++ b/app/Actions/Database/ManageBackup.php @@ -100,4 +100,10 @@ public static function rules(Server $server, array $input): array return $rules; } + + public function stop(Backup $backup): void + { + $backup->status = BackupStatus::STOPPED; + $backup->save(); + } } diff --git a/app/Enums/BackupStatus.php b/app/Enums/BackupStatus.php index d44ebec..428f9a1 100644 --- a/app/Enums/BackupStatus.php +++ b/app/Enums/BackupStatus.php @@ -9,4 +9,6 @@ final class BackupStatus const FAILED = 'failed'; const DELETING = 'deleting'; + + const STOPPED = 'stopped'; } diff --git a/app/Models/Backup.php b/app/Models/Backup.php index 2ab942d..d183799 100644 --- a/app/Models/Backup.php +++ b/app/Models/Backup.php @@ -63,6 +63,7 @@ public static function boot(): void BackupStatus::RUNNING => 'success', BackupStatus::FAILED => 'danger', BackupStatus::DELETING => 'warning', + BackupStatus::STOPPED => 'danger', ]; public function isCustomInterval(): bool diff --git a/app/Models/Database.php b/app/Models/Database.php index e221a92..89f5726 100755 --- a/app/Models/Database.php +++ b/app/Models/Database.php @@ -17,7 +17,7 @@ * @property string $status * @property Server $server * @property Backup[] $backups - * @property Carbon $deleted_at + * @property ?Carbon $deleted_at */ class Database extends AbstractModel { diff --git a/app/Web/Pages/Servers/Databases/Widgets/BackupsList.php b/app/Web/Pages/Servers/Databases/Widgets/BackupsList.php index be87850..29b6efc 100644 --- a/app/Web/Pages/Servers/Databases/Widgets/BackupsList.php +++ b/app/Web/Pages/Servers/Databases/Widgets/BackupsList.php @@ -40,6 +40,7 @@ protected function getTableColumns(): array return [ TextColumn::make('database.name') ->label('Database') + ->tooltip(fn (Backup $record) => $record->database->deleted_at ? 'Deleted at '.$record->database->deleted_at->format('Y-m-d H:i:s') : null) ->searchable(), TextColumn::make('storage.profile') ->label('Storage')