Allow for backups to be renamed (#1546)

This commit is contained in:
Awhikax 2025-07-31 23:47:15 +02:00 committed by GitHub
parent a777f4e0ff
commit d307a2095b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 84 additions and 0 deletions

View File

@ -116,6 +116,37 @@ class BackupResource extends Resource
])
->actions([
ActionGroup::make([
Action::make('rename')
->icon('tabler-pencil')
->authorize(fn () => auth()->user()->can(Permission::ACTION_BACKUP_DELETE, $server))
->label('Rename')
->form([
TextInput::make('name')
->label('Backup Name')
->required()
->maxLength(255)
->default(fn (Backup $backup) => $backup->name),
])
->action(function (Backup $backup, $data) {
$oldName = $backup->name;
$newName = $data['name'];
$backup->update(['name' => $newName]);
if ($oldName !== $newName) {
Activity::event('server:backup.rename')
->subject($backup)
->property(['old_name' => $oldName, 'new_name' => $newName])
->log();
}
Notification::make()
->title('Backup Renamed')
->body('The backup has been successfully renamed.')
->success()
->send();
})
->visible(fn (Backup $backup) => $backup->status === BackupStatus::Successful),
Action::make('lock')
->icon(fn (Backup $backup) => !$backup->is_locked ? 'tabler-lock' : 'tabler-lock-open')
->authorize(fn () => auth()->user()->can(Permission::ACTION_BACKUP_DELETE, $server))

View File

@ -19,6 +19,7 @@ use App\Http\Controllers\Api\Client\ClientApiController;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use App\Http\Requests\Api\Client\Servers\Backups\StoreBackupRequest;
use App\Http\Requests\Api\Client\Servers\Backups\RestoreBackupRequest;
use App\Http\Requests\Api\Client\Servers\Backups\RenameBackupRequest;
use Dedoc\Scramble\Attributes\Group;
#[Group('Server - Backup')]
@ -195,6 +196,35 @@ class BackupController extends ClientApiController
]);
}
/**
* Rename backup
*
* Updates the name of a backup for a server instance.
*
* @return array<array-key, mixed>
*
* @throws \Throwable
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function rename(RenameBackupRequest $request, Server $server, Backup $backup): array
{
$oldName = $backup->name;
$newName = $request->input('name');
$backup->update(['name' => $newName]);
if ($oldName !== $newName) {
Activity::event('server:backup.rename')
->subject($backup)
->property(['old_name' => $oldName, 'new_name' => $newName])
->log();
}
return $this->fractal->item($backup)
->transformWith($this->getTransformer(BackupTransformer::class))
->toArray();
}
/**
* Restore backup
*

View File

@ -0,0 +1,21 @@
<?php
namespace App\Http\Requests\Api\Client\Servers\Backups;
use App\Models\Permission;
use App\Http\Requests\Api\Client\ClientApiRequest;
class RenameBackupRequest extends ClientApiRequest
{
public function permission(): string
{
return Permission::ACTION_BACKUP_DELETE;
}
public function rules(): array
{
return [
'name' => 'required|string|max:255',
];
}
}

View File

@ -58,6 +58,7 @@ return [
'fail' => 'Marked the <b>:name</b> backup as failed',
'lock' => 'Locked the <b>:name</b> backup',
'unlock' => 'Unlocked the <b>:name</b> backup',
'rename' => 'Renamed backup from "<b>:old_name</b>" to "<b>:new_name</b>"',
],
'database' => [
'create' => 'Created new database <b>:name</b>',

View File

@ -117,6 +117,7 @@ Route::prefix('/servers/{server:uuid}')->middleware([ServerSubject::class, Authe
Route::post('/', [Client\Servers\BackupController::class, 'store']);
Route::get('/{backup:uuid}', [Client\Servers\BackupController::class, 'view']);
Route::get('/{backup:uuid}/download', [Client\Servers\BackupController::class, 'download']);
Route::put('/{backup:uuid}/rename', [Client\Servers\BackupController::class, 'rename']);
Route::post('/{backup:uuid}/lock', [Client\Servers\BackupController::class, 'toggleLock']);
Route::post('/{backup:uuid}/restore', [Client\Servers\BackupController::class, 'restore']);
Route::delete('/{backup:uuid}', [Client\Servers\BackupController::class, 'delete']);