mirror of
https://github.com/coollabsio/coolify.git
synced 2026-06-14 03:19:51 +00:00
ce5e736b00
Add ability to move backups between S3 storages and disable S3 backups. Refactor storage resources view from cards to table layout with search functionality and storage selection dropdowns.
86 lines
2.4 KiB
PHP
86 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Storage;
|
|
|
|
use App\Models\S3Storage;
|
|
use App\Models\ScheduledDatabaseBackup;
|
|
use Livewire\Component;
|
|
|
|
class Resources extends Component
|
|
{
|
|
public S3Storage $storage;
|
|
|
|
public array $selectedStorages = [];
|
|
|
|
public function mount(): void
|
|
{
|
|
$backups = ScheduledDatabaseBackup::where('s3_storage_id', $this->storage->id)
|
|
->where('save_s3', true)
|
|
->get();
|
|
|
|
foreach ($backups as $backup) {
|
|
$this->selectedStorages[$backup->id] = $this->storage->id;
|
|
}
|
|
}
|
|
|
|
public function disableS3(int $backupId): void
|
|
{
|
|
$backup = ScheduledDatabaseBackup::findOrFail($backupId);
|
|
|
|
$backup->update([
|
|
'save_s3' => false,
|
|
's3_storage_id' => null,
|
|
]);
|
|
|
|
unset($this->selectedStorages[$backupId]);
|
|
|
|
$this->dispatch('success', 'S3 disabled.', 'S3 backup has been disabled for this schedule.');
|
|
}
|
|
|
|
public function moveBackup(int $backupId): void
|
|
{
|
|
$backup = ScheduledDatabaseBackup::findOrFail($backupId);
|
|
$newStorageId = $this->selectedStorages[$backupId] ?? null;
|
|
|
|
if (! $newStorageId || (int) $newStorageId === $this->storage->id) {
|
|
$this->dispatch('error', 'No change.', 'The backup is already using this storage.');
|
|
|
|
return;
|
|
}
|
|
|
|
$newStorage = S3Storage::where('id', $newStorageId)
|
|
->where('team_id', $this->storage->team_id)
|
|
->first();
|
|
|
|
if (! $newStorage) {
|
|
$this->dispatch('error', 'Storage not found.');
|
|
|
|
return;
|
|
}
|
|
|
|
$backup->update(['s3_storage_id' => $newStorage->id]);
|
|
|
|
unset($this->selectedStorages[$backupId]);
|
|
|
|
$this->dispatch('success', 'Backup moved.', "Moved to {$newStorage->name}.");
|
|
}
|
|
|
|
public function render()
|
|
{
|
|
$backups = ScheduledDatabaseBackup::where('s3_storage_id', $this->storage->id)
|
|
->where('save_s3', true)
|
|
->with('database')
|
|
->get()
|
|
->groupBy(fn ($backup) => $backup->database_type.'-'.$backup->database_id);
|
|
|
|
$allStorages = S3Storage::where('team_id', $this->storage->team_id)
|
|
->orderBy('name')
|
|
->get(['id', 'name', 'is_usable']);
|
|
|
|
return view('livewire.storage.resources', [
|
|
'groupedBackups' => $backups,
|
|
'allStorages' => $allStorages,
|
|
]);
|
|
}
|
|
}
|